我正在尝试在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

09-04 08:35