11

如何在 Fortran 中断开长字符串并继续下一行?

我刚开始在 Fedora 17 中使用 gfortran 4.7.2。当我尝试使用以下测试代码时,我没有得到输出:

    PROGRAM test_ampersand
    IMPLICIT NONE
    PRINT *, 'I am a new learner of' &
     'fortran'
    END PROGRAM test_ampersand

我期待输出为:

I am a new learner of fortran
4

4 回答 4

10

这也应该有效:

PRINT *, 'I am a new learner of &
     &fortran'

也就是说,字符文字可以跨换行符继续,但每个续行必须在第一个非空白位置有一个&符号。

于 2013-05-27T16:56:18.693 回答
7

语句延续在自由格式源代码中的工作方式是将问题的陈述转换为

print *, 'I am a new learner of'      'fortran'

这不是一个有效的事情。自然可以写

print *, 'I am a new learner of'//' fortran'

或者

print *, 'I am a new learner of', 'fortran'

并且可能会看到几乎相同的效果。

但是,如其他答案中所述,文字字符可以使用特殊形式的语句继续在自由格式源代码的行边界上继续:

print *, 'I  am a new learner of &
          &fortran'

通常人们经常会看到自由形式的语句延续只是在&问题中的非终止行上。但是,在这个所谓的字符上下文中,我们必须&在续行上有一个,并且在连续行上,语句继续紧跟在 , 之后的字符&,并且在同一个字符上下文中。

然而,对于固定格式的源,情况就不同了。

      print *, 'I am a new learner of'
     1'fortran'

就好像

      print *, 'I am a new learner of'    'fortran'  ! Lots of spaces ignored

这又是一个无效的陈述。使用

      print *, 'I am a new learner of
     1fortran'

是一个有效的陈述,但同样受到所有这些空间的影响,直到第 72 列。

可以在这里使用字符串连接:

      print *, 'I am a new learner of '//
     1         'fortran'

或者干脆在第 72 列换行(毕竟,我们这样做是因为行很长)。

于 2017-11-19T09:34:22.737 回答
4

当继续有问题的行时,您需要一个逗号,在一行上打印多个变量或文字常量时需要它,或者 string concatenation //,将两个字符串连接成一个。

这将起作用:

PRINT *, 'I am a new learner of ', &
     'fortran'

这也可以:

PRINT *, 'I am a new learner of '// &
     'fortran'
于 2013-05-27T15:44:39.943 回答
2

在我正在编辑的旧代码中,&符号必须恰好出现在 5 个空格之后的第二行;此代码中的所有其他非注释行都以 6 个空格开头:

      PROGRAM test_ampersand
      IMPLICIT NONE
      PRINT *, 'I am a new learner of'
     & 'fortran'
      END PROGRAM test_ampersand

这与编译器期望的 fortran 版本有关,它可能是从代码中推断出来的。因为我在编辑遗留代码,所以我必须遵循 FORTRAN 77 风格。你描述的是 Fortran 95 风格。

您可以在文件扩展名(例如.f08,而不是.f)或编译器选项(例如-std=f2008)中指明语言版本。如果您不受旧版本的限制,最好使用最新版本。

(所有固定列的要求都与早期版本的 Fortran 在穿孔卡上的编码方式有关;较新的版本提供了其他选项。)

于 2015-06-02T17:26:57.170 回答