Это то, что они называют буквенная константа :
Двоичная, восьмеричная или шестнадцатеричная константа ( буквенная константа ) представляет собой последовательность цифр, которая представляет упорядоченную последовательность битов. Такая константа имеет нет типа .
R764 боз-буквальная константа равна двоичная константа , восьмеричная константа или шестнадцатеричная константа R765 двоичная константа равно B ’ digit [ digit ] ... ’
или B " digit [ digit ] ... "
C7107 (R765) digit
должен иметь одно из значений 0
или 1
. R766 восьмеричная равна O ’ digit [ digit ] ... ’
или O " digit [ digit ] ... "
C7108 (R766) di git должен иметь одно из значений от 0
до 7
. R767 шестнадцатеричная равна Z ’ hex-digit [ hex-digit ] ... ’
или Z " hex-digit [ hex-digit ] ... "
R768 hex-di git равно di git или A
через F
C7109 (R764) Должна появиться буквально-постоянная только в качестве data-stmt-constant в операторе DATA или где явно разрешено в 16.9 в качестве фактического аргумента процедуры intrinsi c.
источник: Стандартный раздел Fortran 2018 7.7
Как видно из стандарта, константа boz-literal не имеет типа и может появляются только в операторах данных или некоторых неявных функциях. Это означает, что запись:
print*,"result", o'377'
является недопустимым кодом, поскольку восьмеричное представление не имеет типа. Правильный код должен был выглядеть следующим образом:
print *, "result", INT(o'377')
Однако в Fortran 90 это также было бы недопустимым, так как в DATA-операторах можно было использовать только буквенные константы. Единственным допустимым способом было бы:
INTEGER :: constant
DATA constant /o'377'/
print *, "result", constant
note: Некоторые компиляторы допускают использование boz-literal-констант вне оператора DATA. Solaris-studio преобразует их в тип, требуемый контекстом. У других компиляторов могут быть разные варианты.