2017-10-06 13 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){