Fortran 在(1)处的表达式中需要右括号
我正在尝试用gfortran编译以下代码:Fortran 在(1)处的表达式中需要右括号,fortran,gfortran,Fortran,Gfortran,我正在尝试用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(
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 /
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
我得到以下错误:
错误:在(1)处的表达式中应包含右括号:
错误中引用的行是代码段的第四行。有人知道我的问题是什么吗?我知道这是一段非常古老的代码,但我在一个科学应用程序中继承了它,需要让它工作。您的旧代码使用Hollerith H将字符值放入整数变量中。更现代的Fortran可以是:
character*10 F
DATA F / "(1X, A )" /
更现代:
character (len=10) :: F = "(1X, A )"
但是这些改变了F的类型,这将影响代码的其余部分。因此,使用这些更改将需要其他重写,但如果是我的代码,我会考虑它,考虑问题代码部分的古旧性和不可读性。如果工作量太大,我将使用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 /
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
与
Fortran 66时代的
1H
被称为Hollerith常量,其中1以源代码字符的形式表示常量的长度,然后常量的实际值是H之后的该数量的字符(包括空格)的编码形式。众所周知,它们容易出错
您的代码正在使用固定格式的源代码。这也是出了名的容易出错
这就是说,在对主要固定格式源列的丢失进行调整后,您的代码在这里使用最新版本的gfortran编译。有了霍勒瑞斯常数(Hollerith constants)——所需要的只是位置上的空白——情况可能会严重恶化
(具有讽刺意味的是,使用固定格式的源代码,您通常可以随意地四处散布空格,这使得这两种语言功能的交叉点相当特殊……)
就其价值而言,F和G的编码数据看起来像简单的格式说明符。在“modern”Fortran(自1977年以来!)中,您只需使用字符变量分别保存F和G的格式(1X,A)
和(1X)
(省略空格)。其他变量看起来像简单的字符常量(A
、逗号和空白)-可能用于构建更大的格式说明符
如果我必须维护代码,那么至少将代码带入闪光和奇怪颜色的时代在我的优先事项列表中会占据相当高的位置。答案中添加了gfortran选项,因为注释/ffixed line length none选项会延伸穿孔卡片。:-)成功了!非常感谢你!