This question already has answers here:
Why are these constructs using pre and post-increment undefined behavior?
                                
                                    (14个回答)
                                
                        
                                6年前关闭。
            
                    
答案是45.I无法理解这件事是如何工作的。

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

}

最佳答案

实际上输出是undefined behavior很好。

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


  在上一个和下一个序列点之间,对象应具有其
  通过对表达式的求值,存储值最多只能修改一次。
  此外,先前值应只读以确定该值
  要存储。
  
  未指定操作数的评估顺序。如果尝试
  用于修改赋值运算符的结果或对其进行访问
  在下一个序列点之后,行为是不确定的。

关于c - 发布增量,预增量和运算符优先级,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18515351/

10-14 19:19