我正在研究科学建模程序,还没有让我的程序编译。我没有触及我教授之前坚持的代码,只有makefile。经过多次尝试,我得到的最远的是这个错误:
Error on line 1112: Declaration error for xxmf: adjustable dimension on non-argument
upcase:
intrpl:
splin:
mtrnpr:
我的教授坚持认为这只是一个编译问题,并且应该有一些涉及全局变量的选项,我可以使用它来解决这个问题。我发现最接近的是使用选项
-Mipa=safeall
在makefile中,但我不确定我是否把它放在正确的位置,或者它是否有所不同,因为我仍然得到相同的错误。
答案 0 :(得分:11)
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来说并不是唯一的,是吗。)