编译旧 Fortran 代码时出现语法错误

Syntax error in compiling an old Fortran code

我正在使用某人的 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)

此语法错误背后的原因是什么?

程序无法编译的原因是该行太长,不幸的是您的编译器错误对解决这个问题没有帮助。致命的赠品是,包括错误消息行开头的六个 space,错误消息中的 1 位于第 73 列。您的编译器正在以固定方式解释源代码源格式,它有一些非常特殊的要求:请参阅 section 3.3.2 of N1191 for complete details.

您的编译器应该有一个选项来指定您的源代码应该以自由源代码的形式解释。根据您的错误消息,看起来您最有可能使用的是 gfortran,它具有命令行选项 -ffree-line-length-[n]Check the documentation 并将其设置为适合您的源代码的值。

如果您希望继续使用固定源格式,则必须将该行分成多行,并在每一行的第六列中使用一个续行符。该字符可以是除 space ( ) 或零 (0) 之外的任何字符,如果它位于注释行(以字母 [=15 开头的行),则该字符将被忽略=] 或星号 (*))。这是修复线路的一种可能方法:

****** <- 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))