2

我正在尝试将文件 'ah' 包含到 Fortran 程序 'bf' 文件的内容如下:

c     This is a comment
      k = 10
 100  format( I5 )

男朋友

program test_include
    include 'a.h'
    write(*,100) k
end program test_include

当我尝试使用以下命令编译文件“bf”时

gfortran -ffree-form b.f

编译器给出错误

    Included at b.f:2:
c     This is a comment
1
Error: Unclassifiable statement at (1)

但是当我将注释行更改为

!c    This is a comment

gfortran 编译成功,程序运行正常。

有人可以告诉我如何让 gfortran 将 '*.h' 文件中以 'c' 开头的行识别为注释。我正在尝试将一个类似的文件(注释以'c'开头)从一个库中包含到我的自由格式fortran代码中,我不能真正在该文件中添加所有以'c'开头的注释,开始'!'。

4

1 回答 1

4

包含文件是固定格式的!您不能将自由格式和固定格式混合在一个文件中。自从

[the] INCLUDE 行的效果就像引用的源文本在程序处理之前物理替换了 INCLUDE 行 [,]

合并的源文本需要是固定形式或自由形式,但不能两者兼而有之。[来源:Fortran 2008 标准,Cl。3.4(6)]

这给你留下了两个选择:

  1. 将主程序转换为固定形式,或
  2. 将包含文件转换为自由格式。

对于 1),您需要指定-ffixed-form, 和格式b.f以符合固定格式。b.f然后看起来像

      program test_include
          include 'a.h'
          write(*,100) k
      end program test_include

对于 2) ,您可以将包含文件转换为自由格式。然后包含可以写为:

!     This is a comment
      k = 10
100  format( I5 )

如果您无法转换所有文件,我建议您以固定形式编写包装模块,include源代码,然后use改用包装模块。如果是您提供的代码段,则需要进一步考虑,但如果包含文件只有变量/参数/接口,这可能看起来像

      module wrapper_vars
          include 'vars.h'
      end module

对于子例程和函数,您还可以使用模块:

      module wrapper_subroutines
      contains
          include 'subroutines.h'
      end module
于 2015-11-29T16:07:43.503 回答