如果我有一個如果的C語句,看起來像:C if語句帶&& - 哪個函數會先執行?
if(function1() > 0 && function2() > 0){
//blah
}
哪個函數將執行第一和將它總是以這個順序執行?
如果我有一個如果的C語句,看起來像:C if語句帶&& - 哪個函數會先執行?
if(function1() > 0 && function2() > 0){
//blah
}
哪個函數將執行第一和將它總是以這個順序執行?
這裏function1()
是保證先執行。
&&
運營商是short-circuiting operator。除非function1()
的結果大於零,否則將不會調用function2()
。左到右
不同的是按位二進制&運算符,& &運營商保證評價;:
C99標準 評估第一個操作數後有一個序列點。如果第一個操作數 的值等於0,則不計算第二個操作數。
是不是倒退?如果'function1()> 0'爲真,則必須調用'function2'。 –
啊,你的編輯修正了它。 +1。 –
function1
,是的。當且僅當先前的條件是true
時,將調用function2
。
這就是所謂的「短路」,它是必不可少的,例如像這樣的語句:if (p != 0 && *p == 'X')
我們可以肯定的是p
永遠不會被解除引用,如果它是空的。
哎呀,我猜你是真的。 – jman
@skjaidev:我做到了,謝謝!我腦海中有酒吧...... –
在這種特殊情況下,函數1將始終首先執行,因爲您正在使用運算符& &。
此外,如果function1()> 0,則根本不會調用function2。
function1()
將首先被調用。這不是暗示排序的if
,而是&&
:首先評估左操作數,只有左操作數返回非零值時才評估第二個操作數。
function1()
將首先執行,如果結果小於或等於0 function2()
根本不執行。
這將評估從左到右。檢查了這一點爲more info
在您的代碼段function1()
將執行第一和function2()
將執行只有如果第一個條件會給true
。
您可以輕鬆地檢查出來:在每個功能添加一些printf和讓function1()
回報1.
豈不功能1功能2之前執行,這將永遠是這個順序。如果function1失敗,那麼function2根本不會被執行。 – user626912