Скажем, у меня есть набор определений, упорядоченный таким образом:
#define Var0 ((uint32_t)0x00001)
#define Var1 ((uint32_t)0x00002)
#define Var2 ((uint32_t)0x00004)
и позже в коде у меня это:
#define CurrVar Var1
Когда я пытаюсь сравнить:
#if (CurrVar != Var1)
#error "CurrVar" has to be "Var1" for this code to work
#endif
Я получаю:
error: token is not a valid binary operator in a preprocessor subexpression
Я не могу изменить значения VarX, поскольку они являются частью библиотеки, но мне нужно убедиться, что во время компиляции в коде используется правильное значение .
Есть ли способ сравнить эти выражения? Даже если это будет сравниваться как текст, как это:
"((uint32_t)0x00002)" <> "((uint32_t)0x00002)"
or
"Var1" <> "Var1"
etc