C macro: #if проверить равенство

Есть ли способ проверить числовое равенство в макросах?

Я хочу сделать что-то вроде

#define choice 3

#if choice == 3
  ....
#endif

#if choice == 4
 ...
#endif

Поддерживаются ли макросы C для таких вещей?

Ответы

Ответ 1

Действительно, это должно сработать. См. http://gcc.gnu.org/onlinedocs/cpp/If.html#If

Эта ссылка точна, но написана в "формате стандартов": абстрактно без примеров.

Ответ 2

Другой способ написания вашего кода использует цепочечные директивы #elif:

#if choice == 3
  ...
#elif choice == 4
  ...
#else
  #error Unsupported choice setting
#endif

Обратите внимание, что если choice не #defined, компилятор (препроцессор) обрабатывает его как имеющий значение 0.

Ответ 3

Насколько я знаю, это должно сработать. Какой компилятор вы используете?

PS: Только для информации имена имен обычно записываются в шапки!

#define CHOICE 3