我发现了一些类似于以下内容的遗留代码.说我有以下定义:
#define FOO(x) bar
Run Code Online (Sandbox Code Playgroud)
x从未在定义中引用.那么,这是否意味着FOO()中放置的任何文本都无关紧要?
我正在看的代码散布着调用,例如FOO(someValue);我假设预处理器正在简单地替换整个语句bar,无论是什么someValue?有点因为什么存在而被抛弃x.
是的,在您的示例中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)