2016-07-06 130 views
0
#include <stdio.h> 
#include <stdbool.h> 
int main() { 
    int a=10, b=4; 
    bool res = ((a != b) || printf("GeeksQuiz")); 
    return 0; 
} 

其輸出是no output但我期待GeeksQuiz爲什麼print語句不被執行?

+1

嘗試將printf的結果寫入變量,然後將其打印出來。它會告訴你它返回的是什麼,這可能不是你所期望的。 – Veridian

+0

閱讀關於短路評估。由於'a!= b'已經是'true','printf'永遠不會到達。 – Marvin

+0

如果你期待'GeeksQuiz',那麼你的程序應該是'int main(){puts(「GeeksQuiz」); }' –

回答

2

對於邏輯OR運算符(||),引用C11,章§6.5.14/ P4

[..]如果第一操作數不相等的比較,以0,第二個 操作數未進行評價。[ ..]

因此,printf()永遠不會執行。

爲了闡述,在你的代碼,a10b4,因此,(a != b)計算結果爲1,使評價停在那裏。 RHS操作數爲||printf()語句未執行且沒有正確的可見輸出。

+2

幸運的編輯有... –

+0

@KerrekSB是的,我從6.5.13複製,早些時候......我的意圖是正確的。 :) –

相關問題