我试图对旧代码进行现代化处理(或者至少让它更容易理解)但我已经遇到了一种奇怪的格式,用于{1 FORMAT
语句。
具体来说,它是一个FORMAT
语句,其中包含Hollerith常量(nH
其中n
是一个数字):
FORMAT(15H ((C(I,J),J=1,I3,12H),(D(J),J=1,I3, 6H),I=1,I3,') te'
1,'xt' )
这与语法突出显示混淆,因为它看起来有未闭合的括号。它使用这种格式语句编译得很好,但是关闭括号会导致编译错误(使用intel或gfortran编译器)。
据我了解,Hollerith常量是Fortran 66的一个生物,并且被Fortran 77中CHARACTER
的出现所取代。我通常在用作类似角色的东西时理解它们,但用作{ {1}}让我困惑。
此外,如果我将FORMAT
更改为15H ((...
(即我删除了一个空格),则无法编译。事实上,即使我将代码更改为:
15H ((...
我希望这可以采用更正常的(F77 +)格式。任何帮助表示赞赏。
答案 0 :(得分:5)
你所拥有的实际上是Hollerith 编辑描述符,而不是常量(可能出现在DATA或CALL语句中),尽管它们使用相同的语法。 F77彻底取代了霍勒瑞斯的常数;它添加了char-literal编辑描述符作为(更多!)更好的选择,但是H编辑描述符保留在标准中直到F95(甚至一些编译器仍然接受它作为兼容性功能)。
在任何情况下, go build -o $GOPATH/bin/<exe> $GOPATH/src/your/<pkg>
之前的数字都会在H
之后获取该数量的字符,而没有任何其他分隔符;这就是为什么在H
搞砸之后删除(或添加)一个字符的原因。解析您的格式将其分解为这些部分
H
因此是现代等价物(为清晰起见,可选空格)
15H ((C(I,J),J=1,
I3,
12H),(D(J),J=1,
I3,
6H),I=1,
I3,
') te'
'xt'
或者如果您愿意,可以在继续(包括parens)之后将该文本放在I / O语句而不是FORMAT标签中使用的CHARACTER值,变量或参数中,但是因为您必须将所有引号字符加倍将它们置于不太方便的CHARACTER值中。
你的一线版本可能没有编译,因为你使用的是固定格式,也许默认情况下,只有每个源代码行的前72个字符都是固定格式的,其中第一个6为语句号和连续指示符保留,只留下66,并且该语句是我的计数为71。实际上,您今天发现的任何编译器也接受自由格式,这允许更长的行,并且对于新代码也具有其他优点,但可能需要更改现有代码,有时需要进行大量更改。