我在一个为我们的 fortran 代码提供自定义预处理器的环境中工作。我使用预处理器将逻辑参数切换为一种穷人的函数指针。我今天意识到我遇到了类似这样的情况:
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)编译,因为大概编译器优化了该调用。我目前没有其他编译器可以检查,这段代码是否在其他地方编译?可以/应该将其视为编译器错误吗?
我切换逻辑开关(而不是包括/不包括代码)的部分原因是编译器仍然可以检查该代码块内的接口/语法(如果有能力)(并对不简单的事情发出适当的警告函数调用)。这是否意味着没有执行这些测试,或者只是链接器不需要该功能,所以一切正常?