无法在 f77 中初始化无类型字符
Failed to initialize typeless char in f77
我尝试分配水平table
character*(*) argz(*),tab*1
data tab /Z'09'/
同时使用 f77
和 gfortran
编译得到
data tab /Z'09'/
1 Error: Incompatible types in DATA statement at (1); attempted conversion of INTEGER(16) to CHARACTER(1)
如评论所述,如果您只是想要一个 ASCII 制表符,那么 提供了这样的东西。但是,这个问题还有其他方面,这使得它更加笼统。
诸如 Z'09'
之类的文字常量称为 BOZ 常量。这表示一系列位。
BOZ 常量的使用在 Fortran 标准中受到很大限制(随着时间的推移越来越少),许多编译器允许标准以外的其他用途作为扩展。例如,符合 Fortran 的程序中的 BOZ 常量可能只出现在少数地方。一些编译器可能允许它们以文字常量可能出现的任何方式出现。
您在注释中指向的 Oracle documentation 甚至让编译器允许从其使用中假定的表达式类型。
用你的编译器,尝试
character tab
data tab /Z'09'/
失败。 gfortran 消息表示它正在将常量设为 integer(16)
类型,而该类型(正确地)无法转换为 character
。此外,根据 Fortran 标准,data
语句中由 BOZ 常量定义的任何数据对象都必须是整数。
我们知道
character :: tab=ACHAR(9) ! This is also explicit initialization.
有预期的效果,但我们可以用 BOZ 常量来实现吗?
你指着 gfortran documentation of achar
并说它不是指参数是十六进制的。它在那里说 I
必须是整数。 BOZ 常量不是整数,因此 Fortran 不允许使用 achar(Z'09')
。 [虽然这实际上被 gfortran 和其他编译器所接受。]
完全符合标准的方法是
character :: tab=ACHAR(INT(Z'09'))
as int
接受这些常量,返回一个整数(这反过来又被 achar
接受)。
常量表达式 achar(int(z'09'))
本身可能不会出现在像
这样的 data
语句中
character tab
data tab /ACHAR(INT(Z'09'))/ ! No...
因为它不是常数。但是,我们可以
character, parameter :: tabconst=ACHAR(INT(Z'09'))
character tab
data tab /tabconst/ ! tabconst is a (named) constant
我尝试分配水平table
character*(*) argz(*),tab*1
data tab /Z'09'/
同时使用 f77
和 gfortran
编译得到
data tab /Z'09'/ 1 Error: Incompatible types in DATA statement at (1); attempted conversion of INTEGER(16) to CHARACTER(1)
如评论所述,如果您只是想要一个 ASCII 制表符,那么
诸如 Z'09'
之类的文字常量称为 BOZ 常量。这表示一系列位。
BOZ 常量的使用在 Fortran 标准中受到很大限制(随着时间的推移越来越少),许多编译器允许标准以外的其他用途作为扩展。例如,符合 Fortran 的程序中的 BOZ 常量可能只出现在少数地方。一些编译器可能允许它们以文字常量可能出现的任何方式出现。
您在注释中指向的 Oracle documentation 甚至让编译器允许从其使用中假定的表达式类型。
用你的编译器,尝试
character tab
data tab /Z'09'/
失败。 gfortran 消息表示它正在将常量设为 integer(16)
类型,而该类型(正确地)无法转换为 character
。此外,根据 Fortran 标准,data
语句中由 BOZ 常量定义的任何数据对象都必须是整数。
我们知道
character :: tab=ACHAR(9) ! This is also explicit initialization.
有预期的效果,但我们可以用 BOZ 常量来实现吗?
你指着 gfortran documentation of achar
并说它不是指参数是十六进制的。它在那里说 I
必须是整数。 BOZ 常量不是整数,因此 Fortran 不允许使用 achar(Z'09')
。 [虽然这实际上被 gfortran 和其他编译器所接受。]
完全符合标准的方法是
character :: tab=ACHAR(INT(Z'09'))
as int
接受这些常量,返回一个整数(这反过来又被 achar
接受)。
常量表达式 achar(int(z'09'))
本身可能不会出现在像
data
语句中
character tab
data tab /ACHAR(INT(Z'09'))/ ! No...
因为它不是常数。但是,我们可以
character, parameter :: tabconst=ACHAR(INT(Z'09'))
character tab
data tab /tabconst/ ! tabconst is a (named) constant