This question already has answers here:
Why are these constructs using pre and post-increment undefined behavior?
                                
                                    (14个回答)
                                
                        
                                6年前关闭。
            
                    
#include<stdio.h>
int main()
{
 int i=2;
 printf("%d %d\n",++i,++i);
 return 0;
}


在gcc上的输出是4 4。
请解释此输出

最佳答案

这是未定义的行为。 C参数未定义功能参数的评估顺序。

相关章节:C99第6.5.2.2节第10段


  功能指示符的评估顺序,实际
  参数,而实际参数中的子表达式是
  未指定,但实际调用之前有一个序列点。


同样在C99第6.5.2.2节第10段中


  功能评估后有一个顺序点
  标识符和实际参数,但在实际调用之前。每一个
  调用函数中的求值(包括其他函数调用)
  在此之前或之后没有特别排序的
  执行被调用函数的主体是不确定的
  相对于被调用函数的执行进行排序(94)

关于c - C中带前缀运算符的未定义输出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17737885/

10-11 22:53
查看更多