我想知道什么标准,gcc编译器决定优化变量的值。 这是样本
int a=2;
printf("%d %d\n",a++,++a);
它提供输出
3 4
为什么gcc在预增量中优化并给出a
的最新值而不是在后增量中?在哪个基础上需要做出决定?
答案 0 :(得分:3)
这是未定义的行为。没有指定参数的指定顺序。
答案 1 :(得分:3)
代码有两个问题。
您在同一个表达式中两次更改a
的值,它们之间没有所谓的“序列点”。这是未定义的行为,任何事情都可能发生。 See the FAQ for more information
传递给函数的参数有副作用,副作用是++增量。函数参数的评估顺序是未指定的行为,这意味着编译器已经以某种方式实现了它,但是我们不知道如何实现它。它可能因功能而异,当然也不同于编译器和编译器。
应该从不编写依赖于未定义或未指定行为的代码。 Even more info in the FAQ