为什么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()
语句未执行且没有正确的可见输出。
+2
幸运的编辑有... –
+0
@KerrekSB是的,我从6.5.13复制,早些时候......我的意图是正确的。 :) –
尝试将printf的结果写入变量,然后将其打印出来。它会告诉你它返回的是什么,这可能不是你所期望的。 – Veridian
阅读关于短路评估。由于'a!= b'已经是'true','printf'永远不会到达。 – Marvin
如果你期待'GeeksQuiz',那么你的程序应该是'int main(){puts(“GeeksQuiz”); }' –