Reg*_*gus 6 c preprocessor c-preprocessor
考虑以下简单的 C/C++ 示例:
#define FOO
...
#ifdef FOO
bar++;
#endif
Run Code Online (Sandbox Code Playgroud)
好的,现在我想将该条件(以及任何其他类似的)条件放入一行中,以提高代码可读性(该代码有数十个单行语句,每个语句都需要有条件,每个语句取决于不同的定义)。使用时,看起来像这样:
#define FOO
...
MY_IFDEF(FOO,bar++;) //Single-line conditional
Run Code Online (Sandbox Code Playgroud)
目标是拥有一个可重用的宏,它可以采用任意标识符,并且如果该标识符之前已被 #define-d 编译该语句,并在一行中完成所有操作。
有任何想法吗?
UPDATE0:代码必须针对 C 和 C++ 进行编译
小智 5
您不能#ifdef在扩展宏时使用,但您完全可以预先检查它并在不满足条件时声明空语句。
#ifdef FOO
#define MY_IFDEF(x,y) some-processing-you-need
#else
#define MY_IFDEF(x,y) ;
#endif
Run Code Online (Sandbox Code Playgroud)
另请查看 C++ 的新功能:constexpr这也可以使用。