我使用的是 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
谢谢您的帮助
RECORD
和 STRUCTURE
不是标准的Fortran,甚至不是一个广泛支持的扩展(至少是在 f2c
是真正相关的)。) 它是DEC开发的一种特殊扩展,因此在DEC编译器(Compaq和Intel)的后期开发中保留了这种扩展。
这些扩展在几年前已经被移植到Gfortran中,但在很老的编译器中不支持,如 g77
或 f2c
甚至在当前的一些编译器中。当使用 gfortran 编译时,这些扩展必须被一个特殊的标志所允许。
你的选择是重写Fortran代码,使之成为一个能让 f2c
理解,或者自己翻译代码。或者像本世纪人们经常做的那样,保留你的Fortran(+DEC扩展)代码,用当前的Fortran(+扩展)编译器编译,然后从C中调用二进制。