为什么Fortran输出有一个领先的空间?

时间:2012-05-16 22:25:44

标签: formatting fortran whitespace

我处理来自Fortran程序的大量输出,并且通常看起来这些程序的输出具有前导空格,即字符列1为空白。考虑一个简短的程序leading.f

      program leading
      print *, "<-- What's that space for?"
      end program leading

有输出

 <-- What's that space for?

(是的,开头有一个空格字符)。我的问题包含在该计划中。

2 个答案:

答案 0 :(得分:10)

回到恐龙时代,当FORTRAN输出通常进入绿条冲击打印机时,第一个打印列中的某些字符通常被解释为控制代码(换行符,换页符等)。许多程序员学会明确地将他们输出的第1列空白,除非有一些特殊效果 - 并且旧习惯很难改变!

答案 1 :(得分:2)

正如这里和其他地方的另一个答案所指出的,Fortran 输出具有马车控制的概念。对于使用回车控制的打印机,第一个字符是空白是新行开始所必需的。

Fortran itself deleted Fortran 2003 中的回车控制概念,但为了完整起见,我们可以看到 Fortran 仍然需要以列表为导向的输出(在大多数情况下)此(默认)前导空白(Fortran 2018, 13.10.4第 13 页):

<块引用>

除了在定义的输出过程中通过显式格式化或通过分隔字符序列的延续创建的新记录外,每个输出记录都以空白字符开头。

名单格式也有类似的说法。

您可以通过避免使用列表导向的输出来避免此前导空白:

print '(A)', '<-- No space here'
end

请注意,这里不是print,而是列表导向的输出,这是罪魁祸首。我们看到与 write 类似:

write (*,*) '<-- Space from the list-directed output'
end

最后,如果我们使用内部文件,我们仍然会得到一个带有列表导向输出的前导空白:

character(len=20) :: internal
write (internal, *) '<-- Leading blank here'
end

(如果我们随后使用列表导向输出输出这个内部文件,我们将看到两个前导空格。)