Ampersand在第5列和行的末尾

时间:2012-05-14 13:44:54

标签: fortran fortran90

我今天看到的代码如下:

      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标准是否表示​​&'s在一条线的中间被忽略(或者是那种效果)?

3 个答案:

答案 0 :(得分:5)

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

您展示的片段绝对是符合标准的Fortran 90.该标准定义了一个尾随&成为继续人物。如果要跨行分割标记(例如变量名称)或“字符上下文”(例如字符串文字),则延续运行的行必须以&开头。并且在行启动之后必须没有空格插入字符序列中。我认为你所发布的内容会潜入标准整合,理由是连续的可能被认为不会在现有的空白中引入任何空格。

但是,您的代码段中不需要换行符。

您的代码段绝对不是符合标准的固定格式FORTRAN77。但是,除非你另外指导它们,否则大多数现代Fortran编译器都会放松地看待这种“不符合标准”但“明显是什么意思”的代码,并编写它非常愉快。除非,即你尝试一些奇怪的事情,比如将自由格式代码添加到现有的固定格式源文件中,这只是要求编译器具有异常的适应性。

修改

我的原始答案未能回答OP关于将& s移入第73列的问题,作为创建代码以保持固定和自由格式编译快乐的策略。在FORTRAN77中,连续符号由连续行的第6列中的字符(任何字符)标记。该版本的语言不需要在行尾的任何字符继续。再一次,我发现放一个&在第73栏中,正如OP在评论中指出的那样,固定形式的Fortran忽略了col 73-80中的任何字符,穿孔卡(啊,快乐的日子)只有80列。

但我也看不出任何推荐这种方法的东西。我认为最好不要在同一个源文件中混合使用自由格式和固定格式。所有当前的Fortran编译器都将在同一编译中编译两个表单。但是如果你想继续将两者混合在一起,请随意这样做。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

高性能Mark的答案是正确的,但是对于延续而言,固定(F77)与免费(F90及更高版本允许)格式还有另一个重点。首先,我认为所提供的代码在第6列中具有&字符。如果是的话,它几乎与F77兼容;所需要的只是删除行末尾的尾随&,或将它们移动到第73列。正如Hristo Iliev所说,在{73}和第73列使用& 6允许采用符合多个Fortran标准的格式,这对于INCLUDE语句在不遵循单一标准的环境中编码时非常有用。