私が持っている場合であればのように見えるCでの声明:C if文with && - 最初に実行される関数は?
最初に実行されると、それは常にその順序で実行される関数if(function1() > 0 && function2() > 0){
//blah
}
?
私が持っている場合であればのように見えるCでの声明:C if文with && - 最初に実行される関数は?
最初に実行されると、それは常にその順序で実行される関数if(function1() > 0 && function2() > 0){
//blah
}
?
ここでfunction1()
は、が保証されています。が最初に実行されます。
&&
演算子はshort-circuiting operatorです。 function1()
の結果が0より大きい場合を除き、function2()
は呼び出されません。 C99標準から
:ビット単位のバイナリ&オペレータ、左から右への評価& &オペレータ保証異なり
。 第1オペランドの評価後にシーケンスポイントがあります。第1オペランド が0と等しいと比較される場合、第2オペランドは評価されません。
それは後方ですか? 'function1()> 0'が真であれば、' function2'を呼び出さなければなりません。 –
ああ、あなたの編集はそれを修正しました。 +1。 –
function1
とはい。 function2
は、前の条件がtrue
の場合にのみ呼び出されます。
は、これは「短絡」と呼ばれ、それが不可欠であり、このような文のために例えばさ:if (p != 0 && *p == 'X')
私たちは、それがnullの場合p
が間接参照れることは決してありませんことを確信することができます。
おっと、私はあなたが真実を意味すると思います。 – jman
@skjaidev:ありがとう!私は私の心の中にバーを持っていた... –
& &演算子を使用しているため、この特定の場合、function1が常に最初に実行されます。
さらに、function1()> 0の場合、function2はまったく呼び出されません。
function1()
が最初に呼び出されます。順序を意味するif
ではなく、&&
:左オペランドが最初に評価され、左オペランドがゼロ以外の値を返した場合にのみ2番目のオペランドが評価されます。
function1()
が最初に実行され、その結果が0以下である場合、function2()
はまったく実行されません。
これは左から右に評価されます。あなたのコードスニペットfunction1()
でmore info
のためにこれをチェックすると、最初に実行され、最初の条件がtrue
を与える場合function2()
はのみを実行します。
あなたは簡単にそれをチェックアウトすることができます。各機能にいくつかのprintfを追加し、function1()
リターン1.
を聞かせては関数1は、機能2の前に実行していないだろう、それは常にその順番になります。 function1が失敗すると、function2はまったく実行されません。 – user626912