Formatting pgf77的打印特性(FORTRAN 77行为?)
我编译并运行这个简单的FORTRAN 77程序:Formatting pgf77的打印特性(FORTRAN 77行为?),formatting,fortran,Formatting,Fortran,我编译并运行这个简单的FORTRAN 77程序: program test write(6,*) '- - - - - - - - - - - - - - - - - - - - - - - - - - ', & '- - - - - - - - - - - - - - - - - - - - - - - - - -' write(6,'(2G15.5)') 0.1,0.0 end 使用gfortran或f9
program test
write(6,*) '- - - - - - - - - - - - - - - - - - - - - - - - - - ',
& '- - - - - - - - - - - - - - - - - - - - - - - - - -'
write(6,'(2G15.5)') 0.1,0.0
end
使用gfortran
或f95
时,输出为:
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
0.10000 0.0000
使用pgf77
它是:
- - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - -
0.10000 0.00000E+00
和77国集团
或ifort
:
- - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - -
0.10000 0.0000
出现了几个问题:
G15.5
格式请求?这符合规范吗?为什么
pgf77
是否以不同的方式编写-
行中的换行符是最后三个
编译器由于输出行长度的某些限制。。。是
有没有办法提高这个极限,或者用其他方法强制
单行写入,在编译时 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
0.10000 0.00000
G
编辑描述符导致打印的内容有点复杂,但对于值0.0
,标准(2008版中的10.7.5.2.2)规定编译器应打印带有d-1
的表示(示例中为4)数字的小数部分的数字。因此,您的大多数编译器运行正常;我认为pgf77
是不正确的,但它可能适用于具有不同要求的早期标准
最简单的修复方法可能是使用f
编辑描述符,而不是(2F15.5)
至于连字符行的打印,您使用的*
编辑描述符会导致列表定向输出,从而将输出的精确控制权交给编译器。我的观点是,编译器将表达式的两部分打印在两行上有点反常,但这不是非标准行为
如果你想让连字符全部打印在一行上,控制输出格式,
write(6),(2A24)
或类似的东西应该这样做(我没有为你计算连字符,只是猜测输出的每个部分都有24个)。如果这不吸引你,只需将所有连字符都写进一个字符串即可;即使使用列表定向输出,也可能只写一行。好吧,在我的实际情况中,我必须处理一个由许多不同的人在20多年中编写的大型程序,因此我要求提供一些编译器标志,而不是修改打印格式。我担心你会徒劳地搜索编译器标志,实际上,格式化输出是按照我希望的方式进行格式化,而不是按照代码所说的方式进行格式化。如果不需要(标准)G
编辑描述符行为,请使用另一个编辑描述符。Etcfyi这个例子可以通过简单地将逗号改为/。。就风格而言,假设是一个字符串,它应该是怎样的。由于pgf77是一种商业产品,您应该公平地询问有关g格式的支持(并让我们知道响应…。@george我问了他们,得到了基本相同的答案:没有什么可以做的。从标准来看,我倾向于同意pgf77具有适用于零的f77形式。其他人显然遵循较新的标准。