GNU Fortran supports Hollerith constants in assignments, DATA
statements, function and subroutine arguments. A Hollerith constant is
written as a string of characters preceded by an integer constant
indicating the character count, and the letter H
or
h
, and stored in bytewise fashion in a numeric (INTEGER
,
REAL
, or COMPLEX
), LOGICAL
or CHARACTER
variable.
The constant will be padded with spaces or truncated to fit the size of
the variable in which it is stored.
Examples of valid uses of Hollerith constants:
complex*16 x(2) data x /16Habcdefghijklmnop, 16Hqrstuvwxyz012345/ x(1) = 16HABCDEFGHIJKLMNOP call foo (4h abc)
Examples of Hollerith constants:
integer*4 a a = 0H ! Invalid, at least one character is needed. a = 4HAB12 ! Valid a = 8H12345678 ! Valid, but the Hollerith constant will be truncated. a = 3Hxyz ! Valid, but the Hollerith constant will be padded.
In general, Hollerith constants were used to provide a rudimentary
facility for handling character strings in early Fortran compilers,
prior to the introduction of CHARACTER
variables in Fortran 77;
in those cases, the standard-compliant equivalent is to convert the
program to use proper character strings. On occasion, there may be a
case where the intent is specifically to initialize a numeric variable
with a given byte sequence. In these cases, the same result can be
obtained by using the TRANSFER
statement, as in this example.
integer(kind=4) :: a a = transfer ("abcd", a) ! equivalent to: a = 4Habcd
The use of the -fdec option extends support of Hollerith constants to comparisons:
integer*4 a a = 4hABCD if (a .ne. 4habcd) then write(*,*) "no match" end if
Supported types are numeric (INTEGER
, REAL
, or COMPLEX
),
and CHARACTER
.