5.1.14 Поддержка констант Холлерита
GNU Fortran поддерживает константы Холлерита в операторах присваивания, операторах DATA , аргументах функций и подпрограмм. Константа Холлерита записывается как строка символов, предваряемая целочисленной константой, указывающей количество символов, и буквой H или h, и хранится в байтовом формате в числовой (INTEGER, REAL, или COMPLEX), LOGICAL или CHARACTER переменной. Константа будет дополнена пробелами или усечена для соответствия размеру переменной, в которой она хранится.
Примеры допустимого использования констант Холлерита:
complex*16 x(2) data x /16Habcdefghijklmnop, 16Hqrstuvwxyz012345/ x(1) = 16HABCDEFGHIJKLMNOP call foo (4h abc)
Примеры констант Холлерита:
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.
В общем случае, константы Холлерита использовались для предоставления рудиментарного механизма обработки строковых данных в ранних компиляторах Fortran, до появления CHARACTER переменных в Fortran 77; в таких случаях, для соответствия стандарту, необходимо преобразовать программу, чтобы использовать правильные строковые переменные. Иногда может потребоваться явно инициализировать числовую переменную заданной последовательностью байтов. В таких случаях можно получить тот же результат, используя оператор TRANSFER, как в данном примере.
integer(kind=4) :: a
a = transfer ("abcd", a) ! equivalent to: a = 4Habcd
Использование опции -fdec расширяет поддержку констант Холлерита для сравнений:
integer*4 a a = 4hABCD if (a .ne. 4habcd) then write(*,*) "no match" end if
Поддерживаемые типы — числовые (INTEGER, REAL, или COMPLEX), и CHARACTER.
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-13.3.0/gfortran/Hollerith-constants-support.html