小编fwe*_*nom的帖子

具有未定义结果的C代码,编译器生成无效代码(使用-O3)

我知道当你在C程序中做某些事情时,结果是不确定的.但是,编译器不应该生成无效(机器)代码,对吧?如果代码做错了,或者代码生成了段错误或其他什么,那将是合理的......

这应该是根据编译器规范发生的,还是编译器中的错误?

这是我正在使用的(简单)程序:

int main() {
    char *ptr = 0;
    *(ptr) = 0;
}
Run Code Online (Sandbox Code Playgroud)

我正在编译-O3.那不应该生成无效的硬件指令,对吧?有了-O0,我在运行代码时遇到了段错误.这看起来更加明智.

编辑:它正在生成一条ud2指令......

c gcc undefined-behavior

7
推荐指数
1
解决办法
1555
查看次数

标签 统计

c ×1

gcc ×1

undefined-behavior ×1