-2

我想知道gcc编译器根据什么标准决定优化变量的值。?这是样本

int a=2;
printf("%d %d\n",a++,++a);

它提供输出 3 4

为什么 gcca在前增量中而不是后增量中优化并给出最新值?它在什么基础上做出决定?

4

2 回答 2

3

这是未定义的行为。没有指定评估参数的顺序。

于 2013-10-01T10:59:15.650 回答
3

代码有两个问题。

  • 您在同一个表达式中更改了a两次的值,它们之间没有所谓的“序列点”。这是未定义的行为,任何事情都可能发生。有关详细信息,请参阅常见问题解答

  • 传递给函数的参数有副作用,副作用是 ++ 增量。函数参数的求值顺序是未指定的行为,这意味着编译器已经以某种方式实现了它,但我们不知道如何实现。它可能因函数而异,当然也因编译器而异。

永远不应该编写依赖于未定义或未指定行为的代码。常见问题解答中的更多信息

于 2013-10-01T11:47:00.110 回答