作业和比较

dor*_*ron 4 c c++

看代码:

int i = 5;
if (i = 0)
{
  printf ("Got here\n");
}
Run Code Online (Sandbox Code Playgroud)

关于什么将被打印,C标准有什么要说的?或者更一般地说,分配首先发生还是比较?

dre*_*lax 10

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

if ( expression ) statement

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

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


ini*_*iju 5

首先是作业,因为它是评估的一部分.赋值的表达式返回指定的值,因此表达式的计算结果为false.

  • 我不知道您想要引用标准的哪一部分...赋值是表达式,并且“if”必须在确定该表达式的真实性之前评估其表达式(根据定义)。 (2认同)