Ampersand在第5列和行的末尾

mgi*_*son 3 fortran fortran90

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

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

似乎第5列中的&符号是用户想要用f77编译器编译代码的 - 我的问题是这是否是合法的(符合标准的)fortran 90代码.我认为它可能不是标准符合f77代码,因为尾随的&符号也不在列73中......但如果它们是,那么这是一种使自由格式和固定格式编译器满意的标准方法吗?换句话说,fortran 90标准是否表示​​在一条线的中间只是被忽略(或者那种效果)?

Hig*_*ark 5

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

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

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

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

编辑

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

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

  • 实际上,使用这种混合延续风格背后的基本原理是它允许代码被固定形式的Fortran 77和自由形式的Fortran 90程序"包含" - 不像人们想象的那样模糊,特别是在移植时旧代码. (3认同)