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