C代码后增加意外答案

时间:2012-04-13 11:23:38

标签: c

  

可能重复:
  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

2 个答案:

答案 0 :(得分:1)

没有插入序列点的变量的多次更改是未定义的行为。

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

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

答案 1 :(得分:1)

您正在多次修改同一个变量而没有插入序列点,这是未定义行为
未定义的行为仅表示对程序的行为可能有或没有任何可行的解释。

好读:
Undefined behavior and sequence points