可能重复:
C预处理器:在#define中使用#if?
是否有任何技巧可以在定义的rhs内部使用预处理程序指令?问题是,预处理器将所有rhs折叠成一条长行.但也许有一招?
在rhs中我想要的例子是
#define MY_CHECK \
#ifndef MY_DEF \
# error MY_DEF not defined \
#endif
Run Code Online (Sandbox Code Playgroud)
?
目的是简短:使用1行快捷方式而不是多行检查序列.
Chr*_*odd 12
正如其他人所说,预处理器宏不能扩展到任何其他预处理器指令; 如果他们这样做,你通常会在输入中得到关于迷路'#'字符的奇怪错误.但是,有时你可以做些什么来获得你想要的东西.如果你想要一个扩展为类似的宏:
#ifdef SOMETHING
...some code...
#endif
Run Code Online (Sandbox Code Playgroud)
如果某些代码不包含任何预处理程序指令,则可以定义IFDEF宏:
#ifdef SOMETHING
#define IFDEF_SOMETHING(X) X
#else
#define IFDEF_SOMETHING(X)
#endif
Run Code Online (Sandbox Code Playgroud)
然后IFDEF_SOMETHING(...some code...)在你的其他宏中使用.
如果你想要重复多次预处理器,你可以将它粘贴在自己的文件中,然后#include "stuff"在你需要的每个位置使用它.
它不起作用(§6.10.3.4/ 3:"结果完全宏替换的预处理标记序列不会被处理为预处理指令,即使它类似于一个...").
如果你真的想做这样的事情,你可以在编译前通过像m4这样的东西运行你的源代码 - 但我通常建议不要这样做.