gpt4 book ai didi

fortran - 科学 Fortran 编译错误

转载 作者:行者123 更新时间:2023-12-04 22:24:50 28 4
gpt4 key购买 nike

我正在研究科学建模程序,但还没有让我的程序编译。我还没有触及我的教授坚持以前工作过的代码,只有 makefile。经过多次尝试,我得到的最远的是这个错误:

Error on line 1112: Declaration error for xxmf: adjustable dimension on non-argument
upcase:
intrpl:
splin:
mtrnpr:

我的教授坚持认为这只是一个编译问题,应该有一些涉及全局变量的选项,我可以使用它来解决这个问题。我发现的最接近的是使用该选项
 -Mipa=safeall

在 makefile 中,但我不确定我是否将其放在正确的位置,或者是否有所不同,因为我仍然遇到相同的错误。

最佳答案

Oof——听起来你有一个旧代码,它可以很好地与你的主管的特定版本的古老 f77 编译器一起工作,但是当你慢慢地把它提升到标准时会让你心痛一段时间,这样符合标准的编译器就会做正确的事。

可调数组是这样的:

subroutine mysub(a,n)
integer n
real a(n)

-- 也就是说,传递数组的方式或多或少与您在 C 中的方式相同。Fortran90 及以后的版本允许您使用 assumed-shape arrays
subroutine mysub90(a)
real a(:)
n=size(x,1)

这更清晰,因为编译器正在确保传递正确的数组大小。

因此,听起来您的主管的代码在不是子例程中的参数的东西中使用了这种构造,大概是作为在运行时创建特定大小的数组的一种方式。标准 Fortran77 不允许这样做,但有几个编译器作为扩展做了。幸运的是,您现在可以使用 allocatable arrays 作为执行此操作的标准方法,因此我建议将现在给您带来悲伤的变量更改为可分配数组。

顺便说一下,有很多静态代码分析工具可以让你主动发现这样的问题并追踪它们。 Understand 是一个很好的商业版,有大约 2 周的评估许可证,会发现很多问题。 Forcheck 虽然不是用户友好的,但非常彻底。使用这样的工具将你的主管代码踢和尖叫拖到 2010 年代会有点困难,但这将是对你时间的一项极好的投资。另一个很好的工具集是 eclipse + photran ,但不幸的是,它已经主要假设您有很好的 fortran90 代码——在您可以使用它之前还需要一段时间。

(在有人开始对 fortran 发表尖刻的评论之前——是的,是的,那里有很多旧的蹩脚的 fortran 代码,但这现在几乎不是 fortran 独有的,是吗。)

关于fortran - 科学 Fortran 编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5071455/

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