嗯,这是一个简单的问题,可能有点明显但是,当'if'有一个错误的条件时,它是由编译器读取的,还是编译器直接跳过它?
谢谢! :)
答案 0 :(得分:5)
编译器始终读取整个程序。如果满足“if”条件,许多优化编译器会分析是否可以在编译时评估条件值。如果在编译时已知,则编译器可能会完全从生成的代码中消除该条件。但是,如果在编译时未知条件的值,则编译器将生成用于在运行时评估条件的代码。
在运行时,通常使用条件跳转指令跳转到正确的代码段,具体取决于条件值。例如。如果条件结果为假,CPU将直接“跳过”if体中的代码。
答案 1 :(得分:3)
如果条件静态求值为false,编译器可能会将其优化。
if (false) {
// The compiler may choose to drop this part from the compiled result
}
但是,这是编译器特有的。它在所有语言中都不相同,并且在所有编译器中都不相同。实际上,它可能取决于编译器使用的优化设置。
答案 2 :(得分:1)
在Java中,它在最终优化阶段从字节代码中删除。因为它是减少尺寸的机会。