2013-09-28 34 views
-2

嗯,这是一个简单的问题,可能有点显而易见,但是,如果'if'具有错误条件,是由编译器读取,还是由编译器直接跳过?当条件为假时,会读取(如果有)任何语言的条件?

谢谢! :)

+0

一个优化的编译器可能会抛出它,因为它是无法访问的代码。 – mak

+1

什么样的'如果'和什么语言?例如,C和一些相关语言中的'#if false'会导致该“分支”甚至不被解析。 – harold

+0

在这种情况下,“读”是什么意思?即使“if”条件不成立,期望编译器如何通过实际阅读来了解它? – AnT

回答

1

在Java中,它在最终优化阶段从字节代码中删除。因为它减少了尺寸的运作。

3

如果条件静态评估为false,编译器可能会优化它。

if (false) { 
    // The compiler may choose to drop this part from the compiled result 
} 

但是,这是编译器特有的。在所有语言中不一样,所有编译器都不一样。实际上,它可能取决于编译器使用的优化设置。

5

编译器总是读取整个程序。如果符合“if”条件,许多优化编译器会分析是否可以在编译时评估条件值。如果它在编译时已知,那么编译器可能会从生成的代码中完全消除该条件。但是,如果在编译时未知该条件的值,则编译器将生成用于在运行时评估条件的代码。

在运行时,通常使用条件跳转指令跳转到正确的代码块,具体取决于条件值。例如。如果结果为假,CPU将直接“跳过”if体内的代码。