这次行动有什么不合法之处

sta*_*tor 2 c sequence-points

即与此类似的代码,使打印输出不确定.

int a=41; a++ & printf("%d\n", a);
Run Code Online (Sandbox Code Playgroud)

希望这不是一个问题的愚蠢,因为我不知道这个操作到底是什么.在此先感谢您的反馈!

Set*_*gie 9

问题是没有指定哪个是首先评估的,printf或者是a++,并且因为一个对另一个有副作用(你要么先读a它然后再读它,要么读它然后读它然后写它),你得到未定义的行为.

  • @Dietrich:非常正确.评估的顺序可能取决于(例如)优化级别,或者编译器可以选择不同的顺序,因为它可能在不同的上下文中最有效,这取决于编译器在指令管道时预测的状态的一些细微细节.声明来执行.由于订单是未指定的,它甚至可以假设将决定留给某种怪异的配置文件引导的代码变异运行时优化器(又名"现代CPU"),因此订单以一种方式开始,然后翻转到另一种方式. (2认同)