如果创建my_function()返回一个0成功或-EINVAL失败,那么就这两个语句是等价?下面的语句在C中是否相同?
if(my_function()){
和
if(my_function() == 0){
我知道,1是布尔真,0是布尔值false在C,所以我不知道,如果第一个语句将失败if语句如果创建my_function( )在布尔上下文表达a
成功返回0
如果创建my_function()返回一个0成功或-EINVAL失败,那么就这两个语句是等价?下面的语句在C中是否相同?
if(my_function()){
和
if(my_function() == 0){
我知道,1是布尔真,0是布尔值false在C,所以我不知道,如果第一个语句将失败if语句如果创建my_function( )在布尔上下文表达a
成功返回0
在C通常等同于表达a != 0
。这意味着,你的第一个变种
if(my_function()){
相当于
if(my_function() != 0){
这也就意味着你的第二个变体是不等同于第一个。它实际上是对面到第一个。您的第一个版本检查失败,而第二个版本检查是否成功。
按照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){
嗯...... “等价物”?它们实际上是相反的。第一个版本检查失败,第二个检查是否成功。 'if(my_function()!= 0){'将与第一个版本完全相同。 – AnT
这回答了我的问题;如果你想做出答案,我会接受它。 – Paradox