F2C结构和记录

问题描述 投票:0回答:1

我使用的是 F2C 在我的一个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

当我试图用F2C将源代码转换为C语言时,我得到了以下错误。

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

谢谢您的帮助

c fortran77 f2c
1个回答
6
投票

RECORDSTRUCTURE 不是标准的Fortran,甚至不是一个广泛支持的扩展(至少是在 f2c 是真正相关的)。) 它是DEC开发的一种特殊扩展,因此在DEC编译器(Compaq和Intel)的后期开发中保留了这种扩展。

这些扩展在几年前已经被移植到Gfortran中,但在很老的编译器中不支持,如 g77f2c 甚至在当前的一些编译器中。当使用 gfortran 编译时,这些扩展必须被一个特殊的标志所允许。

你的选择是重写Fortran代码,使之成为一个能让 f2c 理解,或者自己翻译代码。或者像本世纪人们经常做的那样,保留你的Fortran(+DEC扩展)代码,用当前的Fortran(+扩展)编译器编译,然后从C中调用二进制。

© www.soinside.com 2019 - 2024. All rights reserved.