我听说 C 编译器有/没有优化选项可能会生成不同的程序(编译有优化的程序会导致它的行为不同),但我从未遇到过这种情况。 任何人都可以举一个简单的例子来说明这一点?
最佳答案
对于 gcc 4.4.4,这与 -O0
和 -O2
不同
void foo(int i) {
foo(i+1);
}
main() {
foo(0);
}
通过优化,这个循环永远存在。没有优化,它会崩溃(堆栈溢出!)
其他更现实的变体通常取决于时序,容易受到浮点精度变化的影响,或者取决于未定义的行为(未初始化的变量、堆/堆栈布局)
关于使用 GCC -O2 选项编译生成不同的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5422882/