【发布时间】:2015-05-14 13:18:45
【问题描述】:
#define IS_THIS_CORRECT(X) if(X){}
我在我的项目中定义了这个预处理器语句。我正在尝试了解如何使用此功能。
【问题讨论】:
-
这不是函数
标签: c macros c-preprocessor
#define IS_THIS_CORRECT(X) if(X){}
我在我的项目中定义了这个预处理器语句。我正在尝试了解如何使用此功能。
【问题讨论】:
标签: c macros c-preprocessor
#define IS_THIS_CORRECT(X) if(X){}
它可用于检查X(任何值)是否不为零或不是空字符串等。您可以执行以下操作
IS_THIS_CORRECT("Hello")
else puts("The string is empty");
您最好用另一副牙套围绕X 以更安全:
#define IS_THIS_CORRECT(X) if((X)){}
我建议您将此预处理器语句重命名为 IT_IS_CORRECT 甚至 IS_CORRECT 以提高可读性。
【讨论】:
X 已经用括号括起来,因此添加它不是必需的,但会抑制使用常见编译器的IS_THIS_CORRECT(foo = bar) 的有用编译器警告。
#define add(x,y) (x)+(y)。尝试移除大括号并执行add(5+7,10+2)
if(X) 中已经有一对括号在做这些括号的工作:确保X 被视为一个实体。 (顺便说一下,不好的例子;使用mul 宏会更好)。
我猜,但这对我来说有意义的唯一方法是它是否应该被用作
IS_THIS_CORRECT(foo) else { do_something(); }
不过还是很奇怪。
【讨论】:
正如目前所写的那样,几乎没有可能有意义使用它,除非您只想根据X 的值处理 FALSE 情况。
恕我直言,你可以改写成
#define IS_THIS_CORRECT(X) if(X)
然后,你可以像这样使用它
int p = 5;
IS_THIS_CORRECT(X)
{
printf("yay !!!\n");
}
【讨论】: