预处理器指令里面定义?

And*_*rei 10 c-preprocessor

可能重复:
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"在你需要的每个位置使用它.

  • 将预处理器指令序列放入单独的 .h 文件中并包含它是个好主意。 (2认同)

Jer*_*fin 5

它不起作用(§6.10.3.4/ 3:"结果完全宏替换的预处理标记序列不会被处理为预处理指令,即使它类似于一个...").

如果你真的想做这样的事情,你可以在编译前通过像m4这样的东西运行你的源代码 - 但我通常建议不要这样做.