Конкатенация настройки_ с адресом - PullRequest
0 голосов
/ 15 июня 2019

У меня возникли проблемы с конкатенацией setting_ с адресом, который затем используется для сопоставления с типом структуры:

Я использую:

#define ADDR_TO_SETTING(ADDR) { #ADDR, setting_ ## ADDR}

Затем у меня есть структура иenum:

typedef struct
{
    uint8_t setting_ADDR_LOG_ACTIVE;
} settings_t

typedef enum
{
   ADDR_LOG_ACTIVE=0
} addr_e

Что используется следующим образом:

settings_t settings;

settings.ADDR_TO_SETTING(ADDR_LOG_ACTIVE) = false;

Я всегда получаю ошибку компилятора в заголовке, где определение: «ожидаемый идентификатор или» («до»){'токен'. Что я здесь не так делаю?

1 Ответ

0 голосов
/ 15 июня 2019

с вашим макросом

#define ADDR_TO_SETTING(ADDR) { #ADDR, setting_ ## ADDR}

строка

settings.ADDR_TO_SETTING(ADDR_LOG_ACTIVE) = false;

расширяется до

settings.{ "ADDR_LOG_ACTIVE", setting_ADDR_LOG_ACTIVE} = false;

, что является синтаксической ошибкой (особенно часть .{).

Что вы ожидали?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...