1 /*
2  * SPDX-FileCopyrightText: 2016-2022 Espressif Systems (Shanghai) CO LTD
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 #pragma once
8 
9 #include <zephyr/toolchain.h>
10 
11 /*
12  * Utility macros used for designated initializers, which work differently
13  * in C99 and C++ standards mainly for aggregate types.
14  * The member separator, comma, is already part of the macro, please omit the trailing comma.
15  * Usage example:
16  *   struct config_t { char* pchr; char arr[SIZE]; } config = {
17  *              ESP_COMPILER_DESIGNATED_INIT_AGGREGATE_TYPE_EMPTY(pchr)
18  *              ESP_COMPILER_DESIGNATED_INIT_AGGREGATE_TYPE_STR(arr, "Value")
19  *          };
20  */
21 #if defined(__cplusplus) && __cplusplus >= 202002L
22 #define ESP_COMPILER_DESIGNATED_INIT_AGGREGATE_TYPE_STR(member, value)  .member = value,
23 #define ESP_COMPILER_DESIGNATED_INIT_AGGREGATE_TYPE_EMPTY(member) .member = { },
24 #elif defined(__cplusplus) && __cplusplus < 202002L
25 #define ESP_COMPILER_DESIGNATED_INIT_AGGREGATE_TYPE_STR(member, value)  { .member = value },
26 #define ESP_COMPILER_DESIGNATED_INIT_AGGREGATE_TYPE_EMPTY(member) .member = { },
27 #else
28 #define ESP_COMPILER_DESIGNATED_INIT_AGGREGATE_TYPE_STR(member, value)  .member = value,
29 #define ESP_COMPILER_DESIGNATED_INIT_AGGREGATE_TYPE_EMPTY(member)
30 #endif
31