2015-05-14 60 views

回答

0

由于这是目前写的,很少有可能有意义使用它,除非你只想处理基础上的X值假案。

恕我直言,你可以把它重新写成

#define IS_THIS_CORRECT(X) if(X) 

然后,你可以使用它像

int p = 5; 
IS_THIS_CORRECT(X) 
{ 
     printf("yay !!!\n"); 
} 
+0

@ForceBru感谢编辑。 :-) –

0

我猜测,但只有这样,这使得任何意义,我是如果它应该被用作

IS_THIS_CORRECT(foo) else { do_something(); } 

尽管如此,仍然很奇怪。

+0

非常感谢您的意见。 – user3593776

1
#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为更可读性。

+5

额外的括号似乎是一个坏主意。 'X'已经括号了,所以添加它不是必须的,但是会使用通用编译器来压制'IS_THIS_CORRECT(foo = bar)'的有用编译器警告。 – Wintermute

+0

@Wintermute,我只是关注K&R的解决方案。据我所知,他们总是说,必须将这些额外的大括号添加到预处理语句中,如#define add(x,y)(x)+(y)'。尝试删除大括号并执行'add(5 + 7,10 + 2)' – ForceBru

+2

这大部分都是如此,但是在if(X)中已经有一对圆括号做这项工作,这些圆括号意味着:确保'X'被视为一个单一的实体。 (不好的例子,顺便说一下,使用'mul'宏可以更好地工作)。 – Wintermute