变量名中是否不再允许有空格

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了变量名中是否不再允许有空格相关的知识,希望对你有一定的参考价值。

我在大学的时候,在Fortran 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中是否明确允许使用空格,但我记得在Fortran IV (66)中,我写的程序在变量中含有空格。 这个程序可以在gfortran、Powerstation 4、Silverfrost和一个旧的g77编译器中构建和运行。大概在IVF编译器上也能运行(因为IVF前世是Powerstation4)。 我现在没有机会接触到一个。 如果我告诉编译器是F9095......的程序,它都不会编译。

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)

这两个问题是

  1. 在F77中,变量名中是否允许有空格? 我找到的所有参考资料都没有说允许有空格,或者说作者不知道允许有空格。
  2. 在F90中,变量名中的空格是否被明确删除?
答案

当你使用 .f90 文件扩展名,它被视为自由格式的源文件。在自由格式中,空白确实很重要。这种源文件形式是在Fortran 90中引入的。为了向后兼容,关键字在分割和非分割方式中都可以使用(GOTOGO TO, END IFENDIF). 但是,在这种源形式中,标识符(名称)不允许包含空格。

使用 .f.for 用于固定格式的源文件,如果你想使用它。最好查阅你的编译器手册,它允许哪些扩展。虽然在Fortran 2018中被标记为过时,但固定源文件形式在今天仍然是一种有效的源文件形式。在固定源形式中,即使是Fortran 90甚至Fortran 2018代码,空格也没有任何意义。

请注意,今天的编译器将大多数代码编译为某种新标准(2003、2008或2018),不管扩展名是什么。值得注意的是,扩展名.f90并不被视为Fortran 90,它只是在大多数(或所有?)编译器中标志着源文件形式。另请参见 Fortran 2003源文件的正确后缀 - Intel Fortran编译器 这种命名惯例不是由标准定义的,但相当通用。

另一答案

Fortran IV和Fortran 77都允许在名称和关键字中使用空格。不过 它们的名字都有6个字母的限制。因此,你所有的变量名例子在这两种方言的编译器的严格实现中都是不允许的。

以上是关于变量名中是否不再允许有空格的主要内容,如果未能解决你的问题,请参考以下文章

(=)符号后有空格的变量赋值?

4.variables

不允许clang中变量名中的Unicode/特殊字符?

参数前缀 ':' 后不允许有空格

允许单词之间有空格的正则表达式

为啥此代码中的图像下方有空格? [复制]