在C ++中,编译器的执行顺序如何变化

时间:2016-11-28 08:59:51

标签: c++

我有一个程序,它在不同的编译器上提供不同的输出。

#include<stdio.h>
int main()
{
char arr[] = "abcdef";
char *p = arr;
while(*p != '\0')
{
    char b = *p;
    *p++ = *(p+1);
    *p++ = b;
}    
printf(" %s", arr);
getchar();
return 0;
}

当我使用gcc编译器编译它时,它会输出“badcfe”。 但是当使用其他编译器时,它会给出“caec”。 有人可以帮我解决它有两个不同的输出(有解释)。

1 个答案:

答案 0 :(得分:4)

由于运算符优先级

*p++ = *(p+1)将被评估为*(p++) = *(p+1)

整个表达式的行为是 undefined ,因为您正在未序列步骤中读取和写入p。所以编译器在遇到这个表达式时可以做任何想做的事情,这可以解释你正在观察的输出的差异。

&#34; undefinedness&#34;类似于未填充的i = i++;,表示整数类型i