Макрос с аргументами, используемыми в операторе возврата - PullRequest
1 голос
/ 29 января 2011

У меня путаница в следующем коде c

#define MACRO (xx) \
foo(xx)
...    
#ifdef A
return MACRO(a);
#endif
...

Источник не может быть скомпилирован. Но когда я меняю определение на

#define MACRO \
foo(a)

Так что, если я хочу использовать MACRO с аргументом в этом случае, как мне поступить? Спасибо ..

1 Ответ

9 голосов
/ 29 января 2011

Убрать пробел между MACRO и (xx).

Если вы оставите там пробел, препроцессор будет рассматривать (xx) не как аргумент, а как часть расширения. Поэтому всякий раз, когда он видит MACRO, он заменяет его на (xx) foo(xx).

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