可能重复:
Could anyone explain these undefined behaviors (i = i++ + ++i , i = i++, etc…)
请解释以下输出的原因。
#include <stdio.h>
int main()
{
int i = 0, j = 0;
int val1 = 0;
int val2 = 0;
val1 = i+++i+++i++ ;
val2 = ++j+++j+++j ;
printf("value = %d\n", val1);
printf("value = %d\n", val2);
return 0;
}
输出:
value = 0
value = 7
答案 0 :(得分:1)
没有插入序列点的变量的多次更改是未定义的行为。
这意味着规范中没有关于应该发生什么的定义。允许编译器自由地做任何想做的事情 - 任何事情。
序列点仅出现在三元运算符中的;
,&&
,||
,?
和:
以及,
(逗号运算符,不要与函数调用中用逗号分隔参数混淆。)
答案 1 :(得分:1)
您正在多次修改同一个变量而没有插入序列点,这是未定义行为。
未定义的行为仅表示对程序的行为可能有或没有任何可行的解释。