如果my_function()返回0表示成功,或者-EINVAL表示失败,那么这两个语句是否相同?
if( my_function() ){
和
if( my_function() == 0){
我知道1是布尔值True,0是布尔值F在C中,所以如果my_function()成功返回0,我不确定第一个语句是否会使if语句失败。
答案 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){