gpt4 book ai didi

compiler-construction - gfortran 编译器错误?

转载 作者:行者123 更新时间:2023-12-02 06:39:09 25 4
gpt4 key购买 nike

我在一个环境中工作,我们的 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)编译,因为大概编译器优化了调用。目前我没有其他编译器可以检查,这段代码是否在其他地方编译?这可以/应该被视为编译器错误吗?

我切换逻辑开关(而不是包含/不包含代码)的部分原因是编译器仍然可以检查该代码块内的接口(interface)/语法(如果有能力)(并针对不包含的内容发出适当的警告) '简单的函数调用)。这是否意味着没有执行这些测试,或者只是链接器不需要该功能,所以一切正常?

最佳答案

这不是编译器错误。缺少引用的外部子程序不是标准要求 Fortran 处理器诊断的问题。其他处理器可能会也可能不会提示。优化设置之类的东西可能会影响结果 - 英特尔 Fortran 12.1.5 会提示优化关闭,不会提示优化打开。

对于您的示例代码,其中 func2 是一个外部子程序,Fortran 的程序单元独立编译模型意味着不需要过程接口(interface)检查。对于许多处理器,这不太可能发生(实际上 func2 可能在主程序之后很长时间编译的单独文件中,可能在不同的机器上,可能在主程序的源不再可用的情况下) .如果你想要有保证的过程接口(interface)检查,那么你需要确保过程有一个明确的接口(interface),比如把它们放在一个模块中。在 Fortran 2003 标准中引入并至少受 gfortran 4.6 支持的过程指针语言功能也可能有所帮助。

关于compiler-construction - gfortran 编译器错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11463546/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com