2011-11-28 65 views
8

如果我有一個如果的C語句,看起來像:C if語句帶&& - 哪個函數會先執行?

if(function1() > 0 && function2() > 0){ 

    //blah 

} 

哪個函數將執行第一和將它總是以這個順序執行?

+1

豈不功能1功能2之前執行,這將永遠是這個順序。如果function1失敗,那麼function2根本不會被執行。 – user626912

回答

21

這裏function1()保證先執行。

&&運營商是short-circuiting operator。除非function1()的結果大於零,否則將不會調用function2()。左到右

不同的是按位二進制&運算符,& &運營商保證評價;:

C99標準 評估第一個操作數後有一個序列點。如果第一個操作數 的值等於0,則不計算第二個操作數。

+0

是不是倒退?如果'function1()> 0'爲真,則必須調用'function2'。 –

+0

啊,你的編輯修正了它。 +1。 –

3

function1,是的。當且僅當先前的條件是true時,將調用function2

這就是所謂的「短路」,它是必不可少的,例如像這樣的語句:if (p != 0 && *p == 'X')我們可以肯定的是p永遠不會被解除引用,如果它是空的。

+0

哎呀,我猜你是真的。 – jman

+0

@skjaidev:我做到了,謝謝!我腦海中有酒吧...... –

1

在這種特殊情況下,函數1將始終首先執行,因爲您正在使用運算符& &。

此外,如果function1()> 0,則根本不會調用function2。

0

function1()將首先被調用。這不是暗示排序的if,而是&&:首先評估左操作數,只有左操作數返回非零值時才評估第二個操作數。

3

function1()將首先執行,如果結果小於或等於0 function2()根本不執行。

0

在您的代碼段function1()將執行第一和function2()將執行只有如果第一個條件會給true

您可以輕鬆地檢查出來:在每個功能添加一些printf和讓function1()回報1.