查看代码:
int i = 5;
if (i = 0)
{
printf ("Got here\n");
}
C标准对将要打印的内容有何评价? 或者更一般地说,分配是先发生还是比较?
答案 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,然后测试该值的条件。