后增量,预增量和运算符优先级

时间:2013-08-29 15:40:44

标签: c operators post-increment

答案显示为45.我无法理解这件事是如何运作的。

main()
{
    int a =10;
    int i =  a++ + ++a + a++ + ++a;
    printf("%d , %d ", i,a);

}

1 个答案:

答案 0 :(得分:3)

实际上输出是undefined behavior,这很好。

根据C99标准,6.5表达式,§2

  

在前一个和下一个序列点之间,一个对象应该具有它   通过表达式的评估,最多修改一次存储值。   此外,先前的值应只读以确定该值   存储。

     

未指定操作数的评估顺序。如果尝试   用于修改赋值运算符的结果或访问它   在下一个序列点之后,行为未定义。