【发布时间】:2017-01-14 03:46:46
【问题描述】:
我不知道如何在 C 中计算这个表达式? 我对 printf 中表达式的评估有点困惑? 如果 printf 中的表达式从右到左计算,那么表达式的计算应该在遇到 (c>10) 后停止,但它在输出屏幕上打印了 '1'?
这不是 C 的确切语法,而是问我的一个问题。
integer a = 50, b = 25, c = 0;
printf( a > 45 || b > 50 && c > 10 );
【问题讨论】:
-
a > 45 || b > 50 && c > 10将分组为(a > 45 )|| (b > 50 && c > 10)。子表达式的求值顺序从左到右。 -
请不要写这样的代码,多加几个括号不会伤害任何人。
-
我忘了补充一点,除了
||, &&和?:之外,没有定义运算符操作数的求值顺序。所以,不要一概而论我在第一条评论中提到的顺序。 -
"如果 printf 中的表达式从右到左求值..." 你为什么会考虑从右到左求值作为你的第一个猜测? “从右到左求值”的想法从何而来?