以下代码的结果是什么:
#include <stdio.h>
int main() {
int a = 3;
a= (a = 2) + (a = 3);
printf("%d", a);
}
为什么我在gcc上输出6作为输出?为什么不是5?
答案 0 :(得分:9)
您在序列点之间编写和读取变量a
,因此结果正式未定义行为。
查看特定编译器生成的汇编代码将清楚地说明为什么会得到特定结果,但标准根本不做任何保证。
答案 1 :(得分:0)
因为“a =(a = 2)+(a = 3);”中的操作顺序是依赖于实现的。如果是“a =(a = 2)+(b = 3);”答案是5.有可能超精确读取规范可能要求答案为5(如果分配的结果是等式的RHS而不是LHS)......但即使它是的,你甚至不应该考虑依赖任何接近这一点的东西。