2011-11-28 15 views
8

私が持っている場合であればのように見えるCでの声明:C if文with && - 最初に実行される関数は?

最初に実行されると、それは常にその順序で実行される関数
if(function1() > 0 && function2() > 0){ 

    //blah 

} 

+1

を聞かせては関数1は、機能2の前に実行していないだろう、それは常にその順番になります。 function1が失敗すると、function2はまったく実行されません。 – user626912

答えて

21

ここでfunction1()は、が保証されています。が最初に実行されます。

&&演算子はshort-circuiting operatorです。 function1()の結果が0より大きい場合を除き、function2()は呼び出されません。 C99標準から

:ビット単位のバイナリ&オペレータ、左から右への評価& &オペレータ保証異なり

。 第1オペランドの評価後にシーケンスポイントがあります。第1オペランド が0と等しいと比較される場合、第2オペランドは評価されません。

+0

それは後方ですか? 'function1()> 0'が真であれば、' function2'を呼び出さなければなりません。 –

+0

ああ、あなたの編集はそれを修正しました。 +1。 –

3

function1とはい。 function2は、前の条件がtrueの場合にのみ呼び出されます。

は、これは「短絡」と呼ばれ、それが不可欠であり、このような文のために例えばさ:if (p != 0 && *p == 'X')私たちは、それがnullの場合pが間接参照れることは決してありませんことを確信することができます。

+0

おっと、私はあなたが真実を意味すると思います。 – jman

+0

@skjaidev:ありがとう!私は私の心の中にバーを持っていた... –

1

& &演算子を使用しているため、この特定の場合、function1が常に最初に実行されます。

さらに、function1()> 0の場合、function2はまったく呼び出されません。

0

function1()が最初に呼び出されます。順序を意味するifではなく、&&:左オペランドが最初に評価され、左オペランドがゼロ以外の値を返した場合にのみ2番目のオペランドが評価されます。

3

function1()が最初に実行され、その結果が0以下である場合、function2()はまったく実行されません。

1

これは左から右に評価されます。あなたのコードスニペットfunction1()more info

0

のためにこれをチェックすると、最初に実行され、最初の条件がtrueを与える場合function2()のみを実行します。

あなたは簡単にそれをチェックアウトすることができます。各機能にいくつかのprintfを追加し、function1()リターン1.

関連する問題