2017-10-06 8 views
-1

my_function()が成功した場合は0、失敗した場合は-EINVALを返した場合、これらの2つの文は同等ですか?次の文はCで同等ですか?

if(my_function()){ 

と私は1がTrueブール値であり、0はCで偽ブール値なので、最初の文がある場合は、my_function(if文を失敗した場合、私はわからなかったことを承知している

if(my_function() == 0){ 

)は正常に0を返しました。

+3

あの... "等価" を含むように

if(!my_function()){ 

または場合でしょうか?彼らはお互いに実際に*反対です*。最初のバージョンは失敗をチェックし、2番目のバージョンは成功をチェックします。 'if(my_function()!= 0){'は最初のバージョンと全く同じです。 – AnT

+0

それは私の質問に答えます。あなたがその答えをしたいのなら、私はそれを受け入れます。 – Paradox

答えて

3

booleanコンテキスト式のCでは、aは通常式a != 0と等価です。これはあなたの第二の変形例が、最初の1に相当しないことを意味し、あなたの第一の変形

if(my_function()){ 

が順番に

if(my_function() != 0){ 

これと同等であることを意味しています。実際にはと反対で、最初のものはです。あなたの最初のバージョンは失敗をチェックし、2番目のバージョンは成功をチェックします。

2

発現は0に等しくない場合に比較C標準(6.8.4.1ザif文)の両方の形態において

2によれば、最初のサプがを実行する....

と、(6.5.9等価演算子)

3 ==(等しい)と!=(等しくない)演算子は類似しています にその下precedence.108を除く関係演算子)演算子利回りの各 1指定された関係がし、それが偽である 場合は0 ....だから、

この中での発現真である場合ifステートメント

if(my_function()){ 

は、関数がゼロ以外の値を返す場合、0と等しくないものと比較します。この中

関数が0を返した場合の文

if(my_function() == 0){ 

表現my_function() == 0が0に等しくない比較した場合ので、この場合には関係が真であると利回り1

ので、これらの記述は、それぞれ逆向きである場合その他。

同等のステートメントは、ヘッダ<iso646.h>

if(not my_function()){ 

if(my_function() == 0){ 
関連する問題