可以在没有任何长度规范的情况下声明福特的多字符常数



我在编程的介绍课程中被告知可以声明fortran95中的字符常数无需任何长度规格,例如:

character, parameter :: STR = 'Hello World!'

可以在Stephen J. Chapman的书" Fortran95/2003适用于科学家和工程师"(第34页),说

如果指定常数是类型字符,则无需 声明字符串的长度。自命名 常数正在与其类型声明相同的行定义, Fortran编译器可以直接计算 字符串。例如,以下语句声明 常量错误_Message为14个字符字符串'未知 错误!’。

CHARACTER, PARAMETER :: ERROR_MESSAGE = 'Unknown error!'

我知道可以使用(len=*)。但实际上是可能完全省略长度选择器?

当我用Gfortran和Intel编译器测试它时,值为总是被截断为第一个字符。还有另一个编译器吗支持这个?还是有人可以将我指向Fortran的一部分阐明这一点的标准?

fortran 2008标准,如果未指定长度,则character的长度为一个。这是在Cl中给出的。4.4.3.2"字符类型指示符":

4 [...]如果未在 char-selector或a * char长度,长度为1。

这与它是字符变量或命名常数无关。这实际上发生在您的代码中。

在Fortran 95标准和Fortran 90标准中,也存在相同的线。5.1.1.5在两个文档中。

我想查普曼从Fortran 77 Standard,CL中获取他的信息。4.8.1字符常数,尽管该子句没有指命名常数:

字符常数的长度是字符数量 划界撇号,除了每对连续 撇号算作单个字符。划界撇号 不计数。字符常数的长度必须更大 比零。

除此之外,我找不到任何标准或编译器文档中的任何参考来支持查普曼的声明。

fortran 2008标准(我在官方标准之前提到了最后一个免费的草稿)在第4.4.3.2节,第4段(强调是我的)中:

字符固有型规格中的char选择器和实体 - decl或组件中的 * char-length 类型定义的dem指定字符长度。实体decl或组件decl中的 * char长度指定 单个长度并覆盖字符选择器中指定的长度(如果有)。如果未指定 * char长度 在实体decl或组件 - decl中,在char-selector中指定的长度选择器或类型 - 帕拉姆 - 值是 字符长度。如果未在char-selector或 * char-Length中指定长度,则长度为1

这说明,如果您不通过*len(LEN=len)指定长度,则字符长度为1。对于具有参数属性的字符类型(5.3.13)。

作者有可能拥有一个编译器来实施其主张作为供应商扩展,但我无法在标准中找到它的基础。我用GFORTRAN 5.1.0,IFORT 14.0.1和PGF90 11.9进行了测试,并且全部符合标准。

相关内容

最新更新