2017-10-06 62 views
-1

如果创建my_function()返回一个0成功或-EINVAL失败,那么就这两个语句是等价?下面的语句在C中是否相同?

if(my_function()){ 

if(my_function() == 0){ 

我知道,1是布尔真,0是布尔值false在C,所以我不知道,如果第一个语句将失败if语句如果创建my_function( )在布尔上下文表达a成功返回0

+3

嗯...... “等价物”?它们实际上是相反的。第一个版本检查失败,第二个检查是否成功。 'if(my_function()!= 0){'将与第一个版本完全相同。 – AnT

+0

这回答了我的问题;如果你想做出答案,我会接受它。 – Paradox

回答

3

在C通常等同于表达a != 0。这意味着,你的第一个变种

if(my_function()){ 

相当于

if(my_function() != 0){ 

这也就意味着你的第二个变体是不等同于第一个。它实际上是对面到第一个。您的第一个版本检查失败,而第二个版本检查是否成功。

2

按照C标准(6.8.4.1 if语句)

2在这两种形式中,第一子语句执行如果 表达比较不等于0 ....

和(6.5.9平等运营商)

3 ==(等于),!=(不等于)运算符是类似到 除了其下端precedence.108关系运算符)运营商收益率中的每一个 1如果指定的关系为真并且如果 为假0 ....

所以在这种表达if语句

if(my_function()){ 

如果函数返回一个非零值,则不等于0。

在这个if语句

if(my_function() == 0){ 

表达my_function() == 0比较不等于0,如果函数返回0,因为在这种情况下,关系为真和产率1.

所以这些if语句彼此相对其他。

等效的if语句将

if(!my_function()){ 

,或者包含头<iso646.h>

if(not my_function()){ 

if(my_function() == 0){ 
相关问题