1. #include <stdio.h>
    2. int main()
    3. {
    4. int i = 6;
    5. int j = 1;
    6. if(i>0||(j++)>0)
    7. ;
    8. printf("%D\r\n",j);
    9. if(i<0 && (j++)>0)
    10. ;
    11. printf("%D\r\n",j);
    12. return 0;
    13. }

    输出结果都为1。
    输出为什么不是2,而是1呢?
    其实,这里就涉及一个短路计算的问题。

    由于if语句是个条件判断语句,里 面是有两个简单语句进行或运算组合的复合语句,因为或运算中,只要参与或运算的两个表达式的值都 为真,则整个运算结果为真,而由于变量i的值为6,已经大于0了,而该语句已经为true,则不需要执行 后续的j+操作来判断真假,所以后续的j++操作不需要执行,j的值仍然为1。

    因为短路计算的问题,对于&&操作,由于在两个表达式的返回值中,如果有一个为假则整个表达式的值 都为假,如果前一个语句的返回值为 false,则无论后一个语句的返回值是真是假,整个条件判断都为 假,不用执行后一个语句,而a>b的返回值为 false,程序不执行表达式n=c>d,所以,n的值保持为初 值1。