6.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.
Далее: Преобразование символов, Предыдущее: Неявное преобразование значений LOGICAL и INTEGER, Вверх: Расширения, реализованные в GNU Fortran [Содержание][Индекс]
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-11.1.0/gfortran/Hollerith-constants-support.html