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