我想知道gcc编译器根据什么标准决定优化变量的值。?这是样本
int a=2;
printf("%d %d\n",a++,++a);
它提供输出
3 4
为什么 gcca
在前增量中而不是后增量中优化并给出最新值?它在什么基础上做出决定?
我想知道gcc编译器根据什么标准决定优化变量的值。?这是样本
int a=2;
printf("%d %d\n",a++,++a);
它提供输出
3 4
为什么 gcca
在前增量中而不是后增量中优化并给出最新值?它在什么基础上做出决定?
这是未定义的行为。没有指定评估参数的顺序。
代码有两个问题。
您在同一个表达式中更改了a
两次的值,它们之间没有所谓的“序列点”。这是未定义的行为,任何事情都可能发生。有关详细信息,请参阅常见问题解答。
传递给函数的参数有副作用,副作用是 ++ 增量。函数参数的求值顺序是未指定的行为,这意味着编译器已经以某种方式实现了它,但我们不知道如何实现。它可能因函数而异,当然也因编译器而异。
永远不应该编写依赖于未定义或未指定行为的代码。常见问题解答中的更多信息。