Значение макроса заменяется ДО времени компиляции препроцессором и не существует во время выполнения.
Это не переменная, это просто способ использования текста для значения "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
.