C中的以下陈述是否相同?

时间:2017-10-06 01:07:49

标签: c if-statement

如果my_function()返回0表示成功,或者-EINVAL表示失败,那么这两个语句是否相同?

if( my_function() ){  

if( my_function() == 0){

我知道1是布尔值True,0是布尔值F在C中,所以如果my_function()成功返回0,我不确定第一个语句是否会使if语句失败。

2 个答案:

答案 0 :(得分:3)

在C in boolean context中,表达式a通常等同于表达式a != 0。这意味着您的第一个变体

if( my_function() ){  

相当于

if( my_function() != 0 ){  

这反过来意味着您的第二个变体不等同于第一个变体。它实际上与第一个相反。您的第一个版本检查失败,而第二个版本检查是否成功。

答案 1 :(得分:2)

根据C标准(6.8.4.1 if语句)

  

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

和(6.5.9平等运营商)

  

3 ==(等于)和!=(不等于)运算符类似于   关系运算符除了它们的优先级较低.108)每个   如果指定的关系为真,则运算符的结果为1 ,如果为,则为0   这是假的......

所以if语句中的表达式

if( my_function() ){  

如果函数返回非零值,则将unequal与0进行比较。

在此if语句中

if( my_function() == 0){

如果函数返回0,则表达式my_function() == 0将unequal与0进行比较,因为在这种情况下,关系为true并且产生1。

所以这些if语句彼此相反。

等同于if语句

if( !my_function() ){

或是否包含标题<iso646.h>

if( not my_function() ){

if( my_function() == 0){