F2C结构和记录
F2C structure and record
我正在使用 F2C(FORTRAN 77 到 C)将大量 FORTRAN 代码转换为 C。我的一个 FORTRAN 源文件有一个 F2C 出于某些原因不喜欢的包含文件。这是扩展名为 .INS 的包含文件 (TAGLINE.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 调用二进制文件。
我正在使用 F2C(FORTRAN 77 到 C)将大量 FORTRAN 代码转换为 C。我的一个 FORTRAN 源文件有一个 F2C 出于某些原因不喜欢的包含文件。这是扩展名为 .INS 的包含文件 (TAGLINE.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 调用二进制文件。