我在我们的fortran代码的自定义预处理器的环境中工作。我使用预处理器将逻辑参数切换为一种穷人的函数指针。今天我意识到,我有一个类似的情况:gfortran编译器错误?
program main
logical,parameter :: untrue=.false.
if(untrue)then
call func1()
else
call func2()
endif
end
subroutine func2()
print*,"Hello, World!"
end
换句话说,func1
不被任何定义,但是,这个编译与gfortran(版本4.4和4.6),因为据推测,编译器优化了通话了。我目前没有其他编译器需要检查,这些代码是否可以在其他地方编译?可以/应该这被认为是一个编译器错误?
因为我切换逻辑开关(而不是包含/不包含代码),部分原因是编译器仍然可以检查该代码块中的接口/语法(如果有能力的话)(并针对事件发出适当的警告不是简单的函数调用)。这是否意味着这些测试没有被执行或者链接器不需要该功能,因此一切都会通过Ok?
谢谢。在这一点上,我不能依赖标准的新版本。代码是在15年前编写的,并且预处理器是这样的,许多f90构造甚至可能导致它断裂:-(我也知道需要一个接口的程序检查 - 但是,我们的pre -processor。我想,既然标准甚至没有解决死代码的问题,什么都行......谢谢(我会等一会儿,只是为了确保没有其他人有任何关于此的说法,如果他们不要,我会很乐意接受这一点+1对于一个很好的答案任何方式。) – mgilson 2012-07-13 03:43:52