компилятором gfortran не признает замечаний.H файл, который начинается с "c" в первом столбце
Я пытаюсь включить файл 'a. h' в программу Fortran 'b. f' Содержимое файлов выглядит следующим образом:
A. h
c This is a comment
k = 10
100 format( I5 )
B. f
program test_include
include 'a.h'
write(*,100) k
end program test_include
Когда я пытаюсь скомпилировать файл 'b. f', используя следующую команду
gfortran -ffree-form b.f
Компилятор выдает ошибку
Included at b.f:2:
c This is a comment
1
Error: Unclassifiable statement at (1)
Но когда я изменяю строку комментария на
!c This is a comment
Gfortran успешно компилирует его, и программа работает правильно.
Может кто-нибудь сказать мне, как заставить gfortran распознавать линии начиная с буквы " С "в букве "а"*.H ' файл в качестве комментария. Я пытаюсь включить подобный файл (с комментариями, начинающимися с "c") из библиотеки в мой свободный код fortran, и я действительно не могу сделать все комментарии, начинающиеся с " c "в этом файле, чтобы начать с"!".
1 ответ:
Включаемый файл находится в фиксированной форме! Вы не можете смешивать свободную и фиксированную форму в одном файле. Так как
Объединенный исходный текст должен быть либо фиксированной, либо свободной формой, но не смесью того и другого. [Источник: Fortran 2008 Standard, Cl. 3.4 (6)][эффект] строки INCLUDE выглядит так, как если бы исходный текст ссылки физически заменил строку INCLUDE priorto program processing [,]
Это оставляет вам два варианта:
- преобразование главного программа в фиксированной форме, или
- конвертируйте файлы include в свободную форму.
Для 1), вам нужно указать
-ffixed-form
, и форматb.f
, чтобы соответствовать фиксированной форме.b.f
тогда будет выглядеть какprogram test_include include 'a.h' write(*,100) k end program test_include
Для 2), вы бы преобразовали включенные файлы в свободную форму. В таком случае include можно было бы записать следующим образом:
! This is a comment k = 10 100 format( I5 )
Если вы не можете конвертировать все файлы, я бы предложил написать модули оболочки в фиксированной форме,
include
исходный код, а затемuse
модули оболочки вместо. В случае предоставленного Вами сниппета это потребует дальнейших размышлений, но в случае включения файлов только с переменными / параметрами / интерфейсами это может выглядеть какmodule wrapper_vars include 'vars.h' end module
Для подпрограмм и функций можно также использовать модули:
module wrapper_subroutines contains include 'subroutines.h' end module