Структура и запись F2C
Я использую F2C (FORTRAN 77 TO C) для преобразования огромного кода FORTRAN в C. В одном из моих исходных файлов FORTRAN есть включаемый файл, который F2C по некоторым причинам не любит. Вот включаемый файл (TAGLINE.INS) с расширением.INS (сомневаюсь, что это расширение имеет значение):
C
C
C*** SCRATCH INPUT DATA FROM FILE FNAM (.RTV = RAW INPUT TAG VALUE)
C
STRUCTURE /STAGRICL/
CHARACTER*76 UFN !! U72 FILENAME.UP.CASE INIT BLANK
CHARACTER*76 RFN ! R72 FILENAME.RAWCASE INIT BLANK
INTEGER*4 LFN ! I4 FILENAME.LENGTH INIT 0
CHARACTER*32 USN !! U32 SECTION-NAME-UP.CASE INIT BLANK
CHARACTER*32 RSN ! R32 SECTION-NAME RAWCASE INIT BLANK
INTEGER*4 LSN ! I4 SECTION-NAME-LENGTH INIT 0
CHARACTER*32 UTN !! U32 TAG-NAME-UP.CASE INIT BLANK
CHARACTER*32 RTN ! R32 TAG-NAME-RAWCASE INIT BLANK
INTEGER*4 LTN ! I4 TAG-NAME-LENGTH INIT 0
CHARACTER*80 UTV ! U80 TAG-VALUE.UP.CASE.IN INIT BLANK
CHARACTER*80 RTV !! R80 TAG-VALUE.RAWCASE.IN INIT BLANK
INTEGER*4 LTV ! I4 TAG-VALUE-LENGTH INIT 0
CHARACTER*80 RWL ! R80 TAG-RAW.WHOLE.LINE INIT BLANK
INTEGER*4 LWL ! I4 TAG-RAW.WHOLE.LENGTH INIT 0
INTEGER*4 NWL ! I4 LIN.#.IN.ORIG.FILE INIT 0
LOGICAL*4 SET ! L4 TAGRICL SET YET ? INIT FALSE
LOGICAL*4 USE ! L4 TAGRICL USED YET ? INIT FALSE
END STRUCTURE
C
C
PARAMETER (N1000=200)
RECORD /STAGRICL/ TAGRICL(N1000) ! 1000.MAX TAG.NAMES.PER.FILE
COMMON /CTAGRICL/ TAGRICL ! RETURNED TAG.NAMES+TAG.VALUES
При попытке преобразовать исходный код в C с помощью F2C я получаю следующие ошибки:
Error on line 5 of TAGLINE.INS: unclassifiable statement (starts "structure/")
Error on line 34 of TAGLINE.INS: unclassifiable statement (starts "record/sta")
Очевидно, F2C жалуется на структуру внутри включаемого файла (STRUCTURE /STAGRICL/). Строки комментариев Fortran 77 начинаются с символа c в начале.
Мой исходный код включает файл.INS, как показано ниже:
SUBROUTINE FINDSEC (SECTION, ISEC1,ISEC2)
C
c------no.mo.$debug.no.no.no
C
INCLUDE 'TAGLINE.INS'
C
C
CHARACTER*(*) SECTION
......rest of the subroutine
Спасибо за помощь
1 ответ
RECORD
а также STRUCTURE
не являются стандартным Fortran и даже не являются широко поддерживаемым расширением (по крайней мере, в те дни, когда f2c
было действительно актуально). Это своеобразное расширение, разработанное DEC и, следовательно, сохраненное в более поздних версиях компилятора DEC (Compaq и Intel).
Это расширение было перенесено в Gfortran несколько лет назад, но не поддерживается в очень старых компиляторах, таких как g77
или f2c
или даже в некоторых текущих компиляторах. При компиляции с использованием gfortran эти расширения должны быть разрешены специальным флагом.
Вы можете переписать код Fortran на что-нибудь, что f2c
понимает или переводит код самостоятельно. Или, как это часто бывает в этом веке, сохраните свой код Fortran (+ расширения DEC), скомпилируйте его, используя текущий компилятор Fortran (+ расширения), и вызовите двоичный файл из C.