#define FOO(x)bar,x从未在定义中引用,会发生什么?

sch*_*574 0 c-preprocessor

我发现了一些类似于以下内容的遗留代码.说我有以下定义:

#define FOO(x) bar
Run Code Online (Sandbox Code Playgroud)

x从未在定义中引用.那么,这是否意味着FOO()中放置的任何文本都无关紧要?

我正在看的代码散布着调用,例如FOO(someValue);我假设预处理器正在简单地替换整个语句bar,无论是什么someValue?有点因为什么存在而被抛弃x.

Dan*_*our 5

是的,在您的示例中FOO(whatever)完全替换bar.

像这样的宏经常出现在"可配置"代码中,例如:

#if defined(ENABLE_DEBUG_PRINT)
#define DEBUG_PRINT(msg) printf("Here's a message: %s\n", msg)
#else
#define DEBUG_PRINT(msg) /* empty */
#endif
Run Code Online (Sandbox Code Playgroud)