Параметры макроса выполняются с учетом # define'ition ((void) 0)? - PullRequest
2 голосов
/ 14 февраля 2012

У меня есть следующий макрос в C ++

#define AppLogExceptionIf(condition, ...) ((void) 0)

Мне было интересно, будет ли казнен condition? Правильно ли я считаю, что расширение эквивалентно

false;

оператор независимо от condition, например:

AppLogExceptionIf(0 == (x = 5), "Big problem!");

Не присвоит x?

Ответы [ 2 ]

3 голосов
/ 14 февраля 2012

Макросы заменяются текстовыми, поэтому condition даже не появляется в исходном коде после того, как препроцессор его обработал.

3 голосов
/ 14 февраля 2012

Нет, condition не будет оцениваться.Везде, где AppLogExceptionIf появляется с круглыми скобками, и хотя бы один аргумент после него будет заменен в текстовом виде на ((void) 0) до того, как компилятор сможет увидеть код и не будет делать абсолютно ничего, как вы указали, что думали.

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