我在 Fortran 和 C 中进行了一些编程,并且我认为 C 预处理器可以非常灵活地添加或隐藏带有预处理常量的代码。我不知道用 Fortran 有什么方法可以做到这一点,但我很好奇:Fortran 编译器是否检测到可以在编译时删除的代码?
以此为例:
program test_branch
implicit none
logical, parameter :: echo = .false.
integer :: n, sum
sum = 0
do n=1,100
sum = sum + n**2
if (echo) then
print *, "Sum:", sum
end if
end do
end program test_branch
echo 的值永远不会改变,但如果编译器没有意识到这一点,它仍然会每次检查分支,以及在可执行文件中包含死的、无法访问的代码。显然这不是一个很大的区别,特别是对于分支预测,但我想知道是否可以添加这样的表达式并且实际上不需要任何成本。是否有优化设置可以做到这一点,或者默认情况下可以做到这一点?