fortran - 编译旧的 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))
推荐阅读
- python - 用 Scipy 求解微分代数方程
- python - 使用 Selenium Python 单击下一步按钮时出错
- python - 我可以在 Python 中使用 set 的 update 方法来合并两个集合 (xy) 和 (yx) 吗?
- spring-boot - 通过 Google drive api 从 csv 文件自动生成 Google 表格文件
- ninja - Meson / Ninja 构建系统 - 如何在卸载时运行自定义脚本?
- python - 删除循环计算 Python 3 中的非连续时间平均功能
- flutter - 我怎样才能满足'(int)=> void'不是'((num)=> void)类型的子类型?例外?
- android - context 作为参数在 android 中采用 this 并允许我们实现接口的方法。为什么这样?
- vue.js - 如何测试 VUE Created HOOK 中调用的 SetTimeout 函数?使用 Vue 工具 - JEST
- sql-server - IF ELSE 在 SQL Server 中返回错误值