变量名中不再允许有空格
Are spaces no longer allowed in variable names
我在Uni的时候,在Fort运行IV的时候,我们曾经可以这样写程序
program main
integer his days, her days, total of days
his days = 15
her days = 25
total of days = his days + herdays
write(5,100) total of days
100 format(1X, I10)
stop
end program
我尝试将其构建为 F77 程序,并编译并 运行。我不知道 F77 中是否明确允许使用空格,但我记得在 Fort运行 IV (66) 中编写的变量中包含空格的程序。这在 gfort运行、Powerstation 4、Silverfrost 和旧的 g77 编译器中构建和运行。大概它也适用于 IVF 编译器(因为 IVF 在前世是 Powerstation4)。我现在没有访问权限。如果我告诉编译器它是一个 F90/95... 程序,它甚至不会编译。
f90test.f90:2:17:
integer his days, her days, total of days
1
Error: Syntax error in data declaration at (1)
f90test.f90:4:6:
his days = 15
1
Error: Unclassifiable statement at (1)
f90test.f90:5:6:
her days = 25
1
Error: Unclassifiable statement at (1)
f90test.f90:6:6:
total of days = his days + herdays
1
Error: Unclassifiable statement at (1)
f90test.f90:8:21:
print *, total of days
1
Error: Syntax error in PRINT statement at (1)
两个问题是
- F77 中的变量名是否允许有空格?我能找到的所有参考资料实际上都没有说允许使用空格,或者作者可能不知道允许使用空格
- 是否在 F90 中明确删除了变量名中的空格?
当您使用 .f90
文件扩展名时,它被视为自由格式的源文件。在自由格式中,空格确实很重要。 Fortran 90引入了这种源码形式,为了向后兼容,关键字有拆分和不拆分两种方式(GOTO
和GO TO
,END IF
和ENDIF
).但是,此源格式中不允许标识符(名称)包含空格。
如果您想使用固定格式的源文件,请使用 .f
或 .for
。最好查阅您的编译器手册它允许哪些扩展。尽管在 Fortran 2018 中被标记为已过时,但固定源代码形式今天仍然是一种有效的源代码形式。空格在固定源代码形式中没有任何意义,即使它是 Fortran 90 甚至 Fortran 2018 代码。
请注意,今天的编译器将大多数代码编译为一些新标准(2003、2008 或 2018),无论扩展名是什么。值得注意的是,扩展名 .f90 不被视为 Fortran 90,它只是在大多数(或所有?)编译器中标记源文件形式。另请参阅 Correct suffix for Fortran 2003 source file - Intel Fortran compiler 此命名约定不是由标准定义的,但非常通用。
Fortran IV 和 Fortran 77 都允许在名称和关键字中使用空格,但是它们的名称都限制为 6 个字母。因此,在针对这两种方言的编译器的严格实现中,不允许使用所有变量名示例。
我在Uni的时候,在Fort运行IV的时候,我们曾经可以这样写程序
program main
integer his days, her days, total of days
his days = 15
her days = 25
total of days = his days + herdays
write(5,100) total of days
100 format(1X, I10)
stop
end program
我尝试将其构建为 F77 程序,并编译并 运行。我不知道 F77 中是否明确允许使用空格,但我记得在 Fort运行 IV (66) 中编写的变量中包含空格的程序。这在 gfort运行、Powerstation 4、Silverfrost 和旧的 g77 编译器中构建和运行。大概它也适用于 IVF 编译器(因为 IVF 在前世是 Powerstation4)。我现在没有访问权限。如果我告诉编译器它是一个 F90/95... 程序,它甚至不会编译。
f90test.f90:2:17:
integer his days, her days, total of days
1
Error: Syntax error in data declaration at (1)
f90test.f90:4:6:
his days = 15
1
Error: Unclassifiable statement at (1)
f90test.f90:5:6:
her days = 25
1
Error: Unclassifiable statement at (1)
f90test.f90:6:6:
total of days = his days + herdays
1
Error: Unclassifiable statement at (1)
f90test.f90:8:21:
print *, total of days
1
Error: Syntax error in PRINT statement at (1)
两个问题是
- F77 中的变量名是否允许有空格?我能找到的所有参考资料实际上都没有说允许使用空格,或者作者可能不知道允许使用空格
- 是否在 F90 中明确删除了变量名中的空格?
当您使用 .f90
文件扩展名时,它被视为自由格式的源文件。在自由格式中,空格确实很重要。 Fortran 90引入了这种源码形式,为了向后兼容,关键字有拆分和不拆分两种方式(GOTO
和GO TO
,END IF
和ENDIF
).但是,此源格式中不允许标识符(名称)包含空格。
如果您想使用固定格式的源文件,请使用 .f
或 .for
。最好查阅您的编译器手册它允许哪些扩展。尽管在 Fortran 2018 中被标记为已过时,但固定源代码形式今天仍然是一种有效的源代码形式。空格在固定源代码形式中没有任何意义,即使它是 Fortran 90 甚至 Fortran 2018 代码。
请注意,今天的编译器将大多数代码编译为一些新标准(2003、2008 或 2018),无论扩展名是什么。值得注意的是,扩展名 .f90 不被视为 Fortran 90,它只是在大多数(或所有?)编译器中标记源文件形式。另请参阅 Correct suffix for Fortran 2003 source file - Intel Fortran compiler 此命名约定不是由标准定义的,但非常通用。
Fortran IV 和 Fortran 77 都允许在名称和关键字中使用空格,但是它们的名称都限制为 6 个字母。因此,在针对这两种方言的编译器的严格实现中,不允许使用所有变量名示例。