当条件为假时,读取“if”条件(任何语言)?

时间:2013-09-28 19:15:16

标签: if-statement compiler-construction

嗯,这是一个简单的问题,可能有点明显但是,当'if'有一个错误的条件时,它是由编译器读取的,还是编译器直接跳过它?

谢谢! :)

3 个答案:

答案 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中,它在最终优化阶段从字节代码中删除。因为它是减少尺寸的机会。