在Fortran中以'#'开头和/或以'c'结尾的常量是什么意思?

时间:2012-06-27 13:24:49

标签: fortran gfortran

我需要编译一个以前使用过Compaq Fortran编译器的旧Fortran程序。我似乎无法弄清楚以'#'开头的常数是什么。 gfortran说它的语法错误,我似乎找不到很多答案。

CHAR2 = IATA(KK) - #20202030
CHAR3 = IATA(KK+1) - #20202030

#20202030是什么常数?根据评论,此代码应在IATA中使用两个ASCII字符并将其转换为二进制。有人可以解释一下吗?

再向下:

IF (IATA(KK+1) .EQ. #2020202C) THEN

现在最后有一个'C'。这是什么意思?

如何将此移植到gfortran?感觉我错过了一些明显的东西。请赐教。

谢谢!

2 个答案:

答案 0 :(得分:9)

你所看到的是非标准的Fortran。在Compaq Fortran中,#用于为十六进制常量加前缀,正如其中一条评论所暗示的那样。正如另一条评论所暗示的,十六进制常量的标准前缀是Z,数字应该用''标记括起来。因此,非标准#2020202C应转换为标准Z'2020202C'

关于尾随C,我认为这只是一个十六进制数字。

答案 1 :(得分:4)

只是评论:

除了非标准表示法中的十六进制文字外,这些也是符合32位整数值的ASCII字符串。存储在内存中的#20202030 '___0''0___'取决于架构的endiannes而#2020202C'___,'',___'(下划线代表空白) )。使用空白填充是标准的Fortran行为,并将8位字符存储为32位类型,填充空白而不是NUL-s,例如对于Fortran程序员来说,使用#20202030代替#00000030应该不足为奇。

在C和C ++中从另一个字符中减去'0'是将012等字符转换为数字等价物的常用方法(绝对无法使用特殊的Unicode符号)。例如。 '9' - '0'给出9,因为9的ASCII码是0x39(57),而0的ASCII码是0x30(48)。 Fortran不会像C和C ++那样将CHARACTER视为整数,并且必须使用ICHAR()IACHAR()将它们转换为ASCII代码,但这段代码的工作原理与C / C类似C ++就可以了。

如何定义IATA数组?如何将值分配给其元素?