固定格式不适用于 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。
我正在使用最新版本的 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。