Optimization Fortran编译器在优化时是否会完全删除always false if块?

Optimization Fortran编译器在优化时是否会完全删除always false if块?,optimization,compiler-construction,fortran90,Optimization,Compiler Construction,Fortran90,如果我的计划中有以下声明: logical, parameter :: verbose = .false. 将添加一系列内容,例如 if (verbose) write(*,*) "Information here" 使用“-03”编译时会影响性能吗? 我希望编译器能够认识到这些块总是错误的,从而完全删除它们,这样我就可以随意添加调试输出了。是这样吗 我想这可能与编译器有关,但我希望对于最常见的编译器有一个单一的答案。如果不是,gfortran的行为是什么 提前感谢您的帮助。根据上面评论的建

如果我的计划中有以下声明:

logical, parameter :: verbose = .false.
将添加一系列内容,例如

if (verbose) write(*,*) "Information here"
使用“-03”编译时会影响性能吗? 我希望编译器能够认识到这些块总是错误的,从而完全删除它们,这样我就可以随意添加调试输出了。是这样吗

我想这可能与编译器有关,但我希望对于最常见的编译器有一个单一的答案。如果不是,gfortran的行为是什么


提前感谢您的帮助。

根据上面评论的建议,我自己测试了这个。
使用gfortran,即使是优化级别-O0似乎也能完全删除死写块。

这当然取决于编译器,但通过查看编译器生成的汇编器以获得简单的测试程序,您可以相对轻松地检查自己。我(受过教育的)猜测是,与没有这些语句的代码相比,有这些语句的代码在高优化级别上不会显示出任何性能差异。但在互联网上对陌生人的有根据的猜测实际上是毫无价值的;例如,在gfortran中,它在启用,而在ifort中,它在
-O2
中启用。如果这一行在-O3的任何主要编译器的可执行文件中幸存下来,我会非常惊讶,尽管正如@HighPerformanceMark所说的,这最好是根据经验确定的…+1,以便您自己找出答案。