[英]Do I check the existence of a macro function with or without the parens?
在定义宏函数之前,我可以检查它是否已经存在
(这可以避免覆盖先前的定义)。
我可以像这样实现检查和定义:
#ifndef MACRO(X)
#define MACRO(X) FUNCTION(X)
#endif
或者像这样:
#ifndef MACRO
#define MACRO(X) FUNCTION(X)
#endif
当函数已经定义时,两者似乎都有效。
那么,哪个是正确的? 哪个更受欢迎?
没有。
该标准规定#ifndef
相当于#if !defined
,并且该参数defined
必须是一个(可能是括号内) 识别符 。 您不能在标识符中包含parens,因此defined MACRO(X)
不是允许的形式。 这种defined
使用会导致未定义的行为,因此它不可移植。
没有括号。 因为这个原因:
test.c的
#ifdef MACRO(x)
#endif
int main() {}
如果你试图编译这个:
$ gcc test.c test.c:2:13: warning: extra tokens at end of #ifdef directive [enabled by default] #ifdef MACRO(x) ^
它发出警告。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.