一行中的字符太多会创建“数组引用的无效形式”错误?

时间:2013-12-14 17:04:16

标签: arrays fortran

此代码:

uhelp(2:100-1,2:100-1) = (1.000000-omega)*u(2:99,2:99)+omega*0.250000*(f(2:99,2:99)+u(2-1:100-1-1,2:100-1)+u(2:100-1,2-1:100-1-1))
使用以下代码编译时,

给出了以下错误:gfortran -o foo foo.f90

)+omega*0.250000*(f(2:99,2:99)+u(2-1:100-1-1,2:100-1)+u(2:100-1,2-1:100-1-1
                                                                       1                                                         
Error: Invalid form of array reference at (1)

我研究了数组索引,在尝试了一些令我惊讶的事情之后,通过简单地缩短语句的长度,我可以摆脱错误。例如,这有效:

uhelp(2:100-1,2:100-1) = u(2:99,2:99)+omega*0.250000*(f(2:99,2:99)+u(2-1:100-1-1,2:100-1)+u(2:100-1,2-1:100-1-1))

(请注意,除去等号后的第一个词)

Fortran代码由我自己的编译器生成(它会将一些玩具语言解析为fortran 90并在可能的情况下进行一些矢量化。这就是代码看起来像这样的原因)。我不能轻易地重写输入文件,以便生成更短的语句。 fortran编译器每行可以处理多少个字符?如果是,我该如何规避这个问题呢?我对fortran知之甚少,所以我可能会走错路。

Fortran版本: GNU Fortran(Ubuntu / Linaro 4.7.3-2ubuntu4)4.7.3

免责声明:在完成家庭作业时出现了这个问题。

1 个答案:

答案 0 :(得分:3)

Fortran标准明确指出,该行的长度限制为132个字符。 Gfortran对此发出警告,但你没有表现出来。

您可以随时断开该行,并在该行的末尾使用延续字符&,并在下一行继续显示当前语句。

我通常不建议使用超过80或100个字符的行。它有助于提高可读性,你可以在编辑器中打开两个文件并查看完整内容。