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