作业和比较

时间:2010-09-28 21:40:55

标签: c++ c

查看代码:

int i = 5;
if (i = 0)
{
  printf ("Got here\n");
}

C标准对将要打印的内容有何评价? 或者更一般地说,分配是先发生还是比较?

9 个答案:

答案 0 :(得分:10)

§6.8.4说if选择语句的语法是:

if ( expression ) statement

此外,在本节中,它提到如果表达式将une等于0,则执行 statement 。因此必须先评估表达式,然后才能将其与0进行比较。i = 0是一个计算结果为0的表达式。有关进一步的参考,请参见§6.5“表达式”,关于§6.5.16“赋值运算符”,in特别注意这段摘录:

  

赋值运算符将值存储在左操作数指定的对象中。一个   赋值表达式具有赋值后左操作数的值,但不是左值。

答案 1 :(得分:5)

首先分配,因为它是评估的一部分。赋值的表达式返回赋值,因此表达式的计算结果为false。

答案 2 :(得分:3)

i=0的计算结果为0,因此输出不会发生。

先前的分配(源代码的第一行)与结果无关。

答案 3 :(得分:2)

将评估语句i = 0并返回0,因此不会打印该语句。

答案 4 :(得分:2)

当分配发生时无关紧要。相关的是i=0作为表达式的值,并且定义为值为0.

答案 5 :(得分:1)

分配发生,返回0,这是假的。

答案 6 :(得分:0)

首先计算if子句的表达式,结果为0.

此程序永远不会打印“Got here \ n”。

答案 7 :(得分:0)

正如其他人已经说过的那样,赋值返回分配的值,因此永远不会打印语句。如果您希望打印语句,则必须使用if (i = -1)

答案 8 :(得分:0)

什么都不打印。将0分配给i,然后测试该值的条件。