#include <stdio.h>
int main()
{
int i = 6;
int j = 1;
if(i>0||(j++)>0)
;
printf("%D\r\n",j);
if(i<0 && (j++)>0)
;
printf("%D\r\n",j);
return 0;
}
输出结果都为1。
输出为什么不是2,而是1呢?
其实,这里就涉及一个短路计算的问题。
由于if语句是个条件判断语句,里
面是有两个简单语句进行或运算组合的复合语句,因为或运算中,只要参与或运算的两个表达式的值都
为真,则整个运算结果为真,而由于变量i的值为6,已经大于0了,而该语句已经为true,则不需要执行
后续的j+操作来判断真假,所以后续的j++操作不需要执行,j的值仍然为1。
因为短路计算的问题,对于&&操作,由于在两个表达式的返回值中,如果有一个为假则整个表达式的值
都为假,如果前一个语句的返回值为 false,则无论后一个语句的返回值是真是假,整个条件判断都为
假,不用执行后一个语句,而a>b的返回值为 false,程序不执行表达式n=c>d,所以,n的值保持为初
值1。