固定格式不适用于 GNU Fortran 编译器

Fixed form not working for GNU Fortran compiler

我正在使用最新版本的 MinGW 来编译我正在处理的模块的简化部分。这是从中提取的模块不是我自己制作的,所以我需要对其进行调整。它是一个 .FOR 文件,所以我假设它是固定格式的。

源码如下图:

      module ModGlobalConstants

      implicit none

        ! General constants
        integer, parameter :: MAX_EXTENSION_LENGTH = 20
        integer, parameter :: MAX_FILENAME_LENGTH = 1000
        integer, parameter :: INITIAL_STEP = 1
        integer, parameter :: MAXIMUM_STEP = 100000
        integer, parameter :: STRESS_VECTOR_SIZE = 6
        integer, parameter :: DOF_VECTOR_SIZE = 3
        integer, parameter :: N_DIM = 3
        integer, parameter :: N_ELEMENT_NODES = 4
        integer, parameter :: ID_UNDEFINED = -1
        integer, parameter :: dp = selected_real_kind(15, 307)
        real(dp), parameter :: ZERO = 0.0

        double precision, dimension(3), parameter :: 
     + DEFAULT_GRAVITY_DIRECTION = (/ 0.0, -1.0, 0.0 /)
        double precision, parameter :: DEFAULT_GRAVITY_ACCELERATION = 9.81


      contains 
         subroutine TrySomeVariables
                print *, MAX_EXTENSION_LENGTH
                print *, DEFAULT_GRAVITY_ACCELERATION
            end subroutine TrySomeVariables


      end module ModGlobalConstants

当我在 MinGW cmd 提示符下编译时,这是我得到的:

D:\TEMP\TRUNK-MINGW\ALL>gfortran TEMP.FOR
TEMP.FOR:18:72:

         double precision, dimension(3), parameter ::
                                                                        1
Error: Invalid character in name at (1)
TEMP.FOR:19:7:

   + DEFAULT_GRAVITY_DIRECTION = (/ 0.0, -1.0, 0.0 /)
       1
Error: Unclassifiable statement at (1)

根据 this link 固定格式的行延续是通过在代码的第 6 列包含通用符号(上述代码示例中的 +)来完成的。我相信这正是我所做的。为什么编译器会在 DEFAULT_GRAVITY_ACCELERATION 的定义行上抛出错误?

编辑

根据@VladimirF 的回答,我删除了所有选项卡。但是我不同意 + 应该在第 5 列,而是第 6 列(参见上面的 link)。

我还缩短了代码以更好地识别错误来源:

      module ModGlobalConstants

      implicit none

! General constants


      double precision, dimension(3), parameter :: 
     +DEFAULT_GRAVITY_DIRECTION = (/ 0.0, -1.0, 0.0 /)
      double precision, parameter :: 
     +DEFAULT_GRAVITY_ACCELERATION = 9.81

      contains 
      subroutine TrySomeVariables
            print *, MAX_EXTENSION_LENGTH
            print *, DEFAULT_GRAVITY_ACCELERATION
      end subroutine TrySomeVariables
      end module ModGlobalConstants

然而,当我尝试生成目标文件时,我遇到了类似的问题:

D:\TEMP\TRUNK-MINGW\temp>gfortran -c TEMP.FOR -o TEMP.o
TEMP.FOR:8:72:

       double precision, dimension(3), parameter ::
                                                                        1
Error: Invalid character in name at (1)
TEMP.FOR:9:7:

   +DEFAULT_GRAVITY_DIRECTION = (/ 0.0, -1.0, 0.0 /)
       1
Error: Unclassifiable statement at (1)
TEMP.FOR:10:72:

       double precision, parameter ::
                                                                        1
Error: Invalid character in name at (1)
TEMP.FOR:11:7:

   +DEFAULT_GRAVITY_ACCELERATION = 9.81
       1
Error: Unclassifiable statement at (1)
TEMP.FOR:16:49:

             print *, DEFAULT_GRAVITY_ACCELERATION
                                                 1
Error: Symbol 'default_gravity_acceleration' at (1) has no IMPLICIT type
TEMP.FOR:15:41:

             print *, MAX_EXTENSION_LENGTH
                                         1
Error: Symbol 'max_extension_length' at (1) has no IMPLICIT type

您的文件中有一些 TAB 字符。标准 Fortran 不允许使用它们,并且 非常 以固定形式混淆。删除它们。使用 -Wall 找到它们。

您的行 DEFAULT_GRAVITY_ACCELERATION = 9.81 也太长了。

检查 + 是否正好在第 6 列中,并且前面的字符只有空格,没有制表符。也删除所有其他 TAB。