Средства: gfortran
"Если в строке формата дескриптор преобразований использует целочисленную константу, то она может быть заменена заключенным в угловые скобки (< >) целочисленным выражением:"
integer :: m, k
k = 10
do m = 3, 5
k = k*10
write(*, '(2x, i<m>)') k ! 100
end do ! 1000
end ! 10000
О.В. Бартеньев, "Современный Фортран", стр. 294
Такой синтаксис позволяет создавать динамически корректируемый формат для ввода/вывода данных. Однако, компилятор gfortran для приведенного выше кода выдаст ошибку. Как же воспользоваться дескрипторами преобразований <> в gfortran?
Как написано в справочнике по gfortran-у (GFortran manuals):
Как написано в справочнике по gfortran-у (GFortran manuals):
A variable FORMAT expression is format statement which includes angle brackets enclosing a Fortran expression: FORMAT(I<N>). GNU Fortran does not support this legacy extension. The effect of variable format expressions can be reproduced by using the more powerful (and standard) combination of internal output and string formats."
В качестве замены конструкции i<N> предлагается воспользоваться символьной переменной, в которую будет записан необходимый формат. Например, так:
integer :: m, k
character(20) fmt1
k = 10
do m = 3, 5
k = k*10
write(fmt1,*) m ! Записываем в символьную переменную fmt1 целое значение m без формата
! write(*, '(2x, i<m>)') k ! 100 ! Запись для другого компилятора фортана. Например, CVF.
write(*,'(i' // trim(fmt1) // ')') k ! Запись для gfortran. Функцией trim "обрезаем" лишние символы
end do ! 1000
end ! 10000
Комментариев нет:
Отправить комментарий