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

时间:2017-06-30 09:05:35

标签: fortran gfortran

我正在使用最新版本的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链接行,固定格式格式的延续是通过在代码的第6列中包含通用符号(+在上面的代码示例中)来完成的。我相信这正是我所做的。为什么编译器会在DEFAULT_GRAVITY_ACCELERATION的定义行上抛出错误?

修改

根据@VladimirF的回答,我删除了所有标签。但是,我不同意+应该在第5列,而是在第6列(见上面的链接)。

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

      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

1 个答案:

答案 0 :(得分:1)

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

你的专栏DEFAULT_GRAVITY_ACCELERATION = 9.81太长了。

检查+是否完全在第6列,前面的字符只是空格,没有TAB。删除所有其他TAB。