2016-07-06 83 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复制,早些时候......我的意图是正确的。 :) –

相关问题