Макрос C: # если проверка на равенство - PullRequest
22 голосов
/ 21 февраля 2010

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

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

#define choice 3

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

#if choice == 4
 ...
#endif

Поддерживает ли макрос C такие вещи?

Ответы [ 3 ]

27 голосов
/ 21 февраля 2010

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

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

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

25 голосов
/ 21 февраля 2010

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

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

5 голосов
/ 21 февраля 2010

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

PS: Просто для информации имена определений обычно пишутся заглавными буквами!

#define CHOICE 3

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