Установка значения макропеременной в макрофункции C ++ - PullRequest
0 голосов
/ 05 июня 2018

Мне нужно вызвать функцию, которая вызывает макро-функцию для изменения макро-значения во время выполнения.

Этот код не скомпилирован:

#define MY_MACRO 32
#define SET_MY_MACRO_VAL(IS_TRUE)(MY_MACRO=(IS_TRUE)?16:U32)

В функции SET_MY_MACRO_VAL

> error: lvalue required as left operand of assignment

    #define SET_MY_MACRO_VAL(IS_TRUE)(MY_MACRO=(IS_TRUE)?16:U32)
                                          ^
    in expansion of macro 'SET_MY_MACRO_VAL'
         SET_MY_MACRO_VAL(True);
         ^

1 Ответ

0 голосов
/ 05 июня 2018

Значение макроса заменяется ДО времени компиляции препроцессором и не существует во время выполнения.

Это не переменная, это просто способ использования текста для значения "32".

Если вы сделаете это:

#define MY_MACRO 32
#define SET_MY_MACRO_VAL(IS_TRUE)(MY_MACRO=(IS_TRUE)?16:U32)

Это будет расширено до этого

#define MY_MACRO 32
#define SET_MY_MACRO_VAL(IS_TRUE)(32=(IS_TRUE)?16:U32)

Что вы можете сделать, это использовать # define

#ifdef SET_MACRO_VAL_32
#define MY_MACRO 32
#else
#define MY_MACRO 16
#endif

Или используйте условный макрос, если вы предпочитаете

#if (IS_TRUE>0)
#define MY_MACRO 32
#else
#define MY_MACRO 16
#endif

Редактировать: В C ++ вам не нужен макрос.Вы можете использовать переменную template и / или constexpr для значения времени компиляции.В C ++ 17 вы даже можете использовать constexpr if.

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