#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
的值,代码优化的代码是否正确?
答案 0 :(得分:0)
是的,因为代码涉及未定义的行为,从优化的角度来看,编译器所做的任何事情都是正确的。它可以决定生成什么都不做的代码,什么都不输出,或者它可以决定忽略const
(基本上是你在做什么)并生成适合它的代码。
当然,从实施质量问题来看,GOOD编译器应该告诉您这是非法的,而不是做任何有害的事情(比如重新格式化您的驱动器),但一切皆有可能。