我正在尝试在gfortran中编译以下代码:
INTEGER F(10),G(14),LUN(5)
DIMENSION MESSG(NMESSG)
DATA F(1),F(2),F(3),F(4),F(5),F(6),F(7),F(8),F(9),F(10)
1 / 1H( ,1H1 ,1HX ,1H, ,1H ,1H ,1HA ,1H ,1H ,1H) /
DATA G(1),G(2),G(3),G(4),G(5),G(6),G(7),G(8),G(9),G(10)
1 / 1H( ,1H1 ,1HX ,1H ,1H ,1H ,1H ,1H ,1H ,1H /
DATA G(11),G(12),G(13),G(14)
1 / 1H ,1H ,1H ,1H) /
DATA LA/1HA/,LCOM/1H,/,LBLANK/1H /
我收到以下错误:
错误:在(1)处的表达式中需要右括号:
1 / 1H( ,1H1 ,1HX ,1H, ,1H ,1H ,1HA ,1H ,1H ,1H) /
1
错误中引用的行是代码段的第四行。有人知道我的问题是什么吗?我知道这确实是旧代码,但是我在科学应用程序中继承了它,因此需要使其工作。
最佳答案
您的旧代码使用Hollerith H将字符值放入整数变量。更现代的Fortran可能是:
character*10 F
DATA F / "(1X, A )" /
更现代的:
character (len=10) :: F = "(1X, A )"
但是这些改变了F的类型,这会影响其余的代码。因此,使用这些更改将需要其他重写,但是如果是我的代码,考虑到问题代码部分的过时和不可读性,我会考虑使用。如果工作量太大,我可以使用gfortran进行以下编译:
program f2
INTEGER F(10),G(14),LUN(5)
DATA F(1),F(2),F(3),F(4),F(5),F(6),F(7),F(8),F(9),F(10)
$ / 1H( ,1H1 ,1HX ,1H, ,1H ,1H ,1HA ,1H ,1H ,1H) /
DATA G(1),G(2),G(3),G(4),G(5),G(6),G(7),G(8),G(9),G(10), G(11),G(12),G(13),G(14)
$ / 1H( ,1H1 ,1HX ,1H ,1H ,1H ,1H ,1H ,1H ,1H ,1H ,1H ,1H ,1H) /
DATA LA/1HA/,LCOM/1H,/,LBLANK/1H /
end
与
gfortran-mp-4.7 -O3 -ffixed-form -ffixed-line-length-none -std=legacy f2.f