如果創建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