If statement 一个';如果';条件(任何语言的)在条件为false时被读取?

If statement 一个';如果';条件(任何语言的)在条件为false时被读取?,if-statement,compiler-construction,If Statement,Compiler Construction,好吧,这是一个简单的问题,可能有点明显,但当“if”有一个假条件时,它是由编译器读取的,还是编译器直接跳过它 谢谢!:) 在Java中,它在最后的优化阶段从字节码中删除。因为缩小尺寸是一种操作 如果条件静态计算为false,编译器可能会对其进行优化 if (false) { // The compiler may choose to drop this part from the compiled result } 但是,这是特定于编译器的。它在所有语言中都不相同,在所有编译器中也不相同。

好吧,这是一个简单的问题,可能有点明显,但当“if”有一个假条件时,它是由编译器读取的,还是编译器直接跳过它


谢谢!:)

在Java中,它在最后的优化阶段从字节码中删除。因为缩小尺寸是一种操作

如果条件静态计算为false,编译器可能会对其进行优化

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

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

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


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

优化编译器可能会抛出它,因为它是无法访问的代码。什么类型的“if”和什么语言?例如,C和一些相关语言中的
#if false
会导致该“分支”甚至无法解析。在这种情况下,“read”是什么意思?即使
if
条件为false,编译器在实际读取时如何知道它?请仔细阅读表达式求值策略:具体来说,是按名称调用还是按值调用。你可以在《计算机程序的结构和解释》一书中找到所有这些。