许多“旧式”Fortran 应用程序会将霍尔瑞斯 ASCII 数据存储到数值数据对象中。在 1977 Fortran 标准(以及 Fortran 95)中,为此目的提供了 CHARACTER 数据类型,并建议使用。您仍可利用早先的 Fortran 霍尔瑞斯 (nH) 功能对变量进行初始化,但这不是标准做法。下表指明了适合某种数据类型的最大字符数。(在本表中,粗体数据类型指示应通过 -xtypemap 命令行标志提升缺省类型。)
表 7–1 数据类型的最大字符数
|
最大标准 ASCII 字符数 |
|
|
|
---|---|---|---|---|
数据类型 |
缺省 |
INTEGER:64 |
REAL:64 |
DOUBLE:128 |
BYTE |
1 |
1 |
1 |
1 |
COMPLEX |
8 |
8 |
16 |
16 |
COMPLEX*16 |
16 |
16 |
16 |
16 |
COMPLEX*32 |
32 |
32 |
32 |
32 |
DOUBLE COMPLEX |
16 |
16 |
32 |
32 |
DOUBLE PRECISION |
8 |
8 |
16 |
16 |
INTEGER |
4 |
8 |
4 |
8 |
INTEGER*2 |
2 |
2 |
2 |
2 |
INTEGER*4 |
4 |
4 |
4 |
4 |
INTEGER*8 |
8 |
8 |
8 |
8 |
LOGICAL |
4 |
8 |
4 |
8 |
LOGICAL*1 |
1 |
1 |
1 |
1 |
LOGICAL*2 |
2 |
2 |
2 |
2 |
LOGICAL*4 |
4 |
4 |
4 |
4 |
LOGICAL*8 |
8 |
8 |
8 |
8 |
REAL |
4 |
4 |
8 |
8 |
REAL*4 |
4 |
4 |
4 |
4 |
REAL*8 |
8 |
8 |
8 |
8 |
REAL*16 |
16 |
16 |
16 |
16 |
示例:用霍尔瑞斯初始化变量:
demo% cat FourA8.f double complex x(2) data x /16Habcdefghijklmnop, 16Hqrstuvwxyz012345/ write( 6, ’(4A8, "!")’ ) x end demo% f95 -o FourA8 FourA8.f demo% FourA8 abcdefghijklmnopqrstuvwxyz012345! demo% |
如果需要,可以用霍尔瑞斯初始化具有兼容类型的数据项,然后将其传递给其他例程。
如果将霍尔瑞斯常量作为参数传递,或者将其用在表达式或比较中,它们将被解释为字符型表达式。使用编译器选项 -xhasc=no,可以让编译器在子程序调用时将参数中的霍尔瑞斯常量视作无类型数据。在移植较早的 Fortran 程序时可能需要这样做。