4

我今天遇到了一些看起来像这样的代码:

      subroutine sub(hello,world,this,routine,takes,a, &
     &   crazy,large,number,of,arguments,              &
     &   so,many,that,it,gets,split,across,four,       &
     &   lines)

似乎第 5 列中的和号是为了防止用户想要使用 f77 编译器编译代码——我的问题是这是否是合法的(符合标准的)fortran 90 代码。我想它可能不是符合标准的 f77 代码,因为尾随的 & 号也不在第 73 列中……但如果是的话,这是否是使自由格式和固定格式编译器满意的标准方法?换句话说,fortran 90 标准是否说在一行中间的 & 被简单地忽略(或类似的东西)?

4

3 回答 3

6

& 是 Fortran 90 自由格式的连续字符。编译器的行为就像通过将尾随 & 的位置与下一行的前导 & 匹配来连接行一样。由于 Fortran 很乐意忽略标记之间的空格,因此您发布的内容是一种跨多个源文件行编写非常长的语句的方式。(OP 可能已经知道这一切,其他读者可能不知道。)

您显示的片段绝对是符合标准的 Fortran 90。标准定义了一个尾随 & 作为延续字符。如果要跨行拆分标记(例如变量名)或“字符上下文”(例如字符串文字),则继续运行的行必须以 & 开头,并且不能有空格插入到行首 & 之后的字符序列中。我认为您发布的内容潜入标准符合性,因为可能认为连续的 &s 不会将任何空白引入现有空白。

但是,您的代码段中不需要以 &s 开头的行。

您的代码段绝对不是符合标准的固定格式 FORTRAN77。然而,大多数现代 Fortran 编译器,除非您另有指示,否则会对这种“不符合标准”但“显而易见”的代码采取轻松的看法,并非常愉快地编译它。除非,也就是说,你尝试一些奇怪的事情,比如将自由格式的代码添加到现有的固定格式的源文件中,那只是要求编译器适应。

编辑

我最初的答案未能回答 OP 关于将 &s 移动到第 73 列作为创建代码以保持固定和自由格式编译满意的策略的问题。在 FORTRAN77 中,续行由续行第 6 列中的字符(任何字符)标记。该版本的语言不需要在行尾出现任何字符。同样,我看不出在第 73 列中放置 & 有什么问题。正如 OP 在评论中指出的那样,固定格式的 Fortran 忽略了第 73-80 列中的任何字符,并且打孔卡(啊,快乐的日子)只有 80列。

但我也看不出有什么可以推荐这种方法的。我认为最好不要在同一个源文件中混合自由格式和固定格式。当前所有的 Fortran 编译器都将在同一编译中编译这两种形式。但是,如果您想继续将两者混合,请随意这样做。

于 2012-05-14T14:06:59.197 回答
1

是的,这符合 Fortran 90。如果下一行的第一个非空白字符是“&”,则实际源文本从下一个非空白字符开始。

于 2012-05-14T14:03:04.497 回答
0

高性能标记的答案是正确的,但是关于固定(F77)与免费(F90 及更高版本中允许)格式的延续还有另一个重要点。首先,在我看来,提供的代码&在第 6 列中有字符。如果是这样,那么它几乎与 F77 兼容;所需要做的就是删除行尾的尾随&',或将它们移动到第 73 列。正如 Hristo Iliev 所指出的,在第&73 列和第 6 列都使用 an 允许符合多个 Fortran 的格式标准,这对于INCLUDE在不遵守单一标准的环境中编码时的语句 很有用。

于 2016-10-14T11:59:42.007 回答