在增量之前增量或乘法后首先乘法会发生什么?

时间:2016-08-24 15:57:10

标签: c

该程序的输出结果为4.00000。 我不知道首先将2与c相乘会发生什么,然后增加或者增加2乘以2?

int main()        
{
int c=1;
c=c+2*c++;
printf("\n%f", c);
return 0;
}

1 个答案:

答案 0 :(得分:0)

这会调用未定义的行为,这意味着您的程序中可能会发生任何事情。

参见C99规范,特别是 J.2未定义行为:

  

在以下情况下,行为未定义: [...]

     
      
  • 在两个序列点之间,对象被多次修改,或者被修改,读取先前值而不是确定要存储的值(6.5)。
  •   

根据经验,“两个序列点之间”表示结束语句的两个分号(;)之间。摘录中提到的“对象”是变量c

通过这种方式,我们可以清楚地看到对象在两个序列点之间被修改两次。在评估表达式c++期间修改了一次,在分配期间修改了一次。