-3

可能重复:
谁能解释这些未定义的行为(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 = %d\n", val1);
    printf("value = %d\n", val2);
    return 0;
}

输出 :

value = 0  
value = 7
4

2 回答 2

1

没有中间序列点的变量的多次变化是未定义的行为。

这意味着规范中没有关于应该发生什么的定义。编译器可以自由地做它想做的任何事情——任何事情。

序列点仅出现在;, &&, ||,?:三元运算符中,and ,(逗号运算符,不要与函数调用中的逗号分隔参数混淆)。

于 2012-04-13T11:24:40.137 回答
1

您多次修改同一个变量而没有中间序列点,这是Undefined Behavior
未定义的行为仅仅意味着对程序的行为可能有也可能没有任何可行的解释。

好读:
未定义的行为和序列点

于 2012-04-13T11:24:57.763 回答