fortran - 第 5 列和行尾的 & 符号

标签 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 标准是否说行中间的 & 被简单地忽略(或类似的东西)?

最佳答案

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

您展示的代码片段绝对是符合标准的 Fortran 90。该标准将尾随 & 定义为连续字符。如果要跨行拆分标记(例如变量名称)或“字符上下文”(例如字符串文字),则继续运行的行必须以 & 开头,并且不能有空格插入到行开始 & 之后的字符序列中。我认为您发布的内容偷偷摸摸地符合标准,理由是连续的 &s 可能被认为不会将任何空格引入现有的空格中。

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

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

编辑

我的原始答案未能回答 OP 的问题,即将 &s 移动到第 73 列作为创建代码以保持固定和自由格式编译愉快的策略。在 FORTRAN77 中,连续行由连续行的第 6 列中的字符(任何字符)标记。那个版本的语言不需要在行尾有任何字符被继续。同样,在第 73 列中放置 & 并没有发现任何问题。正如 OP 在评论中指出的那样,固定格式的 Fortran 忽略第 73-80 列中的任何字符,而穿孔卡片(啊,快乐的日子)只有 80列。

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

关于fortran - 第 5 列和行尾的 & 符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10584561/

相关文章:

fortran - 如何包装 fortran write 语句

fortran - 大型数组的 Fortran 中出现 `Relocation truncated to fit` 错误

arrays - 假设大小的数组 : Colon vs. 星号 - DIMENSION( :) arr vs. arr(*)

c++ - 将 C++ 字符数组传递给 Fortran

fortran - DATA 语句问题 : Not enough variables

arrays - 向量化访问非连续内存位置的循环

gdb - GDB 可以用于打印 Fortran 90 中派生类型的可分配数组的值吗?

快速计算R中的二重积分

algorithm - 网格前 10 个值的坐标

fortran - 如何将具有多个参数的函数传递给需要仅具有一个参数的函数的子例程?