Sun Studio 12 Update 1:Fortran 用户指南

3.4.124 –xhasc[={ yes|no}]

将霍尔瑞斯常量视为实际参数列表中的字符串。

如果使用 -xhasc=yes,则当霍尔瑞斯常量在子例程或函数调用中作为实际参数出现时,编译器将霍尔瑞斯常量视为字符串。这是缺省值,并且符合 Fortran 标准。(编译器生成的实际调用列表包含每个字符串的隐藏字符串长度。)

如果使用 -xhasc=no,则霍尔瑞斯常量将被视为子程序调用中的无类型值,并且只将它们的地址放在实际参数列表中。(传递到子程序的实际调用列表中不会生成字符串长度。)

如果例程调用带有霍尔瑞斯常量的子程序,并且调用的子程序要求参数为 INTEGER(或除 CHARACTER 以外的任意类型),请使用 -xhasc=no 编译例程。

示例:


demo% cat hasc.f
                call z(4habcd, ’abcdefg’)
                end
                subroutine z(i, s)
                integer i
                character *(*) s
                print *, "string length = ", len(s)
                return
                end
demo% f95 -o has0 hasc.f
demo% has0
 string length =   4    <-- should be 7
demo% f95 -o has1 -xhasc=no hasc.f
demo% has1
 string length =   7  <-- now correct length for s

4habcd 传递到 z 是通过使用 -xhasc=no 进行编译来正确处理的。

提供此标记是为了帮助移植传统的 Fortran 77 程序。