#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語句不被執行?
#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語句不被執行?
對於邏輯OR運算符(||
),引用C11
,章§6.5.14/ P4
[..]如果第一操作數不相等的比較,以0,第二個 操作數未進行評價。[ ..]
因此,printf()
永遠不會執行。
爲了闡述,在你的代碼,a
是10
和b
是4
,因此,(a != b)
計算結果爲1
,使評價停在那裏。 RHS操作數爲||
,printf()
語句未執行且沒有正確的可見輸出。
幸運的編輯有... –
@KerrekSB是的,我從6.5.13複製,早些時候......我的意圖是正確的。 :) –
嘗試將printf的結果寫入變量,然後將其打印出來。它會告訴你它返回的是什麼,這可能不是你所期望的。 – Veridian
閱讀關於短路評估。由於'a!= b'已經是'true','printf'永遠不會到達。 – Marvin
如果你期待'GeeksQuiz',那麼你的程序應該是'int main(){puts(「GeeksQuiz」); }' –