可能的重复项:
谁能解释这些未定义的行为(i = i ++ + ++i,i = i++,等等......
请解释以下输出的原因。
#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 = %dn", val1);
printf("value = %dn", val2);
return 0;
}
输出:
value = 0
value = 7
您在没有干预序列点的情况下多次修改同一变量,这就是未定义的行为。
未定义的行为仅意味着对程序的行为可能存在也可能没有任何可行的解释。
好读:
未定义的行为和序列点
没有干预序列点的变量的多次更改是未定义的行为。
这意味着规范中没有定义应该发生的情况。编译器可以自由地做任何它想做的事情——任何事情。
序列点仅存在于三元运算符和,
(逗号运算符,不要与函数调用中的逗号分隔参数混淆)中的;
、&&
、||
、?
和:
处。