F2 C структура и запись - PullRequest
       35

F2 C структура и запись

0 голосов
/ 30 апреля 2020

Я использую F2 C (FORTRAN 77 TO C) для преобразования огромного кода FORTRAN в C. Один из моих исходных файлов FORTRAN имеет включаемый файл, который F2 C не нравится по некоторым причинам. Вот включаемый файл (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 с помощью F2 C, Я получаю следующие ошибки:

Error on line 5 of TAGLINE.INS: unclassifiable statement (starts "structure/")
Error on line 34 of TAGLINE.INS: unclassifiable statement (starts "record/sta")

Очевидно, F2 C жалуется на структуру внутри включаемого файла (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 Ответ

6 голосов
/ 30 апреля 2020

RECORD и STRUCTURE не являются стандартным Fortran и даже не получили широкого распространения (по крайней мере, в те дни, когда f2c был действительно актуален). Это своеобразное расширение, разработанное DE C и, следовательно, сохраненное в более поздней разработке компилятора DE C (Compaq и Intel).

Это расширение было перенесено в Gfortran несколько лет назад go но не поддерживаются в очень старых компиляторах, таких как g77 или f2c, или даже в некоторых современных компиляторах. При компиляции с использованием gfortran эти расширения должны быть разрешены специальным флагом.

Вы можете переписать код Фортрана во что-то, что f2c понимает, или перевести код самостоятельно. Или, как это часто делают люди в этом столетии, сохраните ваш код на Fortran (+ DE C extensions), скомпилируйте его с использованием текущего компилятора Fortran (+ extensions) и вызовите двоичный файл из C.

...