编译旧的Fortran代码时出现语法错误
我正在使用某人的 Fortran 脚本,我对此进行了一些更改。现在我在执行它时遇到语法错误。我是 Fortran 的新手,所以无法弄清楚。
代码如下:
integer i_canorg
integer i
integer n
integer canorg(n)
real r1demdoms(n)
real r1supdoms(n)
real r1supdomcan(n)
real r1rivout(n)
real r1envflw(n)
if(canorg(i).ne.0)then
i0l_canorg=canorg(i)
call calc_supcan1(i_canorg,r1demdoms(i),r1supdoms(i),r1rivout(i_canorg),r1envflw(i_canorg),r1supdomcan(i))
end if
代码很长,我另外加了if命令和i_canorg参数。
运行代码时出现以下错误:
348 | call calc_supcan1(i0lcanorg,r1demdoms(i),r1supdoms(i),r1rivout(i_canorg),r1envflw(i_canorg),r1supdomcan(i))
| 1
Error: Syntax error in argument list at (1)
此语法错误背后的原因是什么?
回答
程序没有编译的原因是行太长,不幸的是你的编译器的错误对弄清楚这一点没有帮助。致命的赠品是,包括错误消息中行首的六个空格,错误消息1中的第 73 列。您的编译器正在以固定源代码形式解释源代码,这有一些非常特殊的要求:有关完整的详细信息,请参阅N1191 的第 3.3.2 节。
您的编译器应该有一个选项来指定您的源代码应该以自由源代码形式进行解释。根据您的错误消息,您似乎最有可能使用 gfortran,它具有命令行选项-ffree-line-length-[n]。检查文档并将其设置为适合您的源代码的值。
如果您希望继续使用固定源格式,则必须将该行分成多行,并在每个连续行的第六列中使用一个连续字符。该字符可以是除空格 ( ) 或零 ( 0)之外的任何字符,如果它在注释行(以字母C或星号 ( *)开头的行)中,则将被忽略。这是固定线路的一种可能方法:
****** <- note the six special columns at the beginning of the line
call calc_supcan1(i_canorg,r1demdoms(i),r1supdoms(i),
> r1rivout(i_canorg),r1envflw(i_canorg),r1supdomcan(i))