这个代码是如何由GCC优化的?

时间:2015-10-04 18:03:39

标签: c optimization undefined-behavior

#include <stdio.h>

int main() {
    const int a = 10;
    int *ptr = &a;

    printf("Initial value of a:%d\n", a);

    *ptr = 100;
    printf("Modified value of a: %d\n", a);

    return 0;  
}

输出(gcc -O3 const_ptr.c -o const_ptr -save-temps):

 Initial value of a: 10
 Modified value of a: 100

我在启用了优化的情况下编译了代码,但是在第二个a之前修改了printf的值,代码优化的代码是否正确?

1 个答案:

答案 0 :(得分:0)

是的,因为代码涉及未定义的行为,从优化的角度来看,编译器所做的任何事情都是正确的。它可以决定生成什么都不做的代码,什么都不输出,或者它可以决定忽略const(基本上是你在做什么)并生成适合它的代码。

当然,从实施质量问题来看,GOOD编译器应该告诉您这是非法的,而不是做任何有害的事情(比如重新格式化您的驱动器),但一切皆有可能。

相关问题