1

最后几行是什么意思?

a=0;
b=0;
c=0;

a && b++;
c || b--;

你能改变这个问题来用更有趣的例子来解释吗?

4

2 回答 2

10

对于您给出的示例:如果a非零,则递增b;如果c为零,则递减b

由于短路评估的规则,即。

你也可以用一个函数作为右边的参数来测试它;printf将对此有好处,因为它为我们提供了易于观察的输出。

#include <stdio.h>
int main()
{
    if (0 && printf("RHS of 0-and\n"))
    {
    }

    if (1 && printf("RHS of 1-and\n"))
    {
    }

    if (0 || printf("RHS of 0-or\n"))
    {
    }

    if (1 || printf("RHS of 1-or\n"))
    {
    }

    return 0;
}

输出:

RHS of 1-and
RHS of 0-or
于 2010-05-02T20:46:38.003 回答
1
a && b++;    is equivalent to:  if(a) b++;

c || b--;    is equivalent to:   if(!c) b--;

但是写这种表达方式是没有意义的。它不会编译成更好的代码,并且在几乎所有情况下都不太可读,即使它看起来更短。

于 2010-05-03T18:18:26.907 回答