Ответ 1
Рассмотрим следующий код:
#ifdef foo
foo();
#endif
Если вы хотите, чтобы фрагмент, подобный приведенному выше, вызывал функцию foo
, вам нужно определить foo
. Однако, если вы просто
#define foo
тогда имя функции foo
будет заменено пустым токеном, а первый фрагмент будет предварительно обработан только ();
. Если, однако, вы
#define foo foo
то первый фрагмент будет препроцессором до foo();
, как и должно быть.