EMi*_*ler 9 compiler-construction fortran control-characters gfortran
在" 科学家和工程师的Fortran 95/2003 "一书中,有很多关于认识到格式语句中的第一列是为控制字符保留的重要性.我还看到互联网上的控制字符被称为运输控制.
为了避免混淆,通过控制字符,我将字符"1,空白(即\ s),0和+"称为当放置在第一列(字符)中时对输出的垂直间距产生影响格式声明.
另外,请参阅这个完全以固定宽度字体编写的纯文本网页:Fortran支架控制(因为没有什么比等宽字体中的散文更能说明准确性和古老性).我发现这个页面和其他类似的页面并不十分清楚.
据的Fortran 95/2003科学家和工程师,失败回顾,第一列被保留以供滑架控制可导致可怕意想不到的输出.解读Dave Barry,输入错误的字符,核导弹向挪威开火.
然而,当我试图坚持这个严厉的警告时,我发现gfortran不知道我在说什么.
请允许我用一些示例代码说明我的观点.我正在尝试打印数字Pi:
PROGRAM test_format
IMPLICIT NONE
REAL :: PI = 2 * ACOS(0.0)
WRITE (*, 100) PI
WRITE (*, 200) PI
WRITE (*, 300) PI
100 FORMAT ('1', "New page: ", F11.9)
200 FORMAT (' ', "Single Space: ", F11.9)
300 FORMAT ('0', "Double Space: ", F11.9)
END PROGRAM test_format
Run Code Online (Sandbox Code Playgroud)
这是输出:
1New page: 3.141592741
Single Space: 3.141592741
0Double Space: 3.141592741
Run Code Online (Sandbox Code Playgroud)
"1"和"0"不是拼写错误.似乎gfortran完全忽略了控制字符列.
那么,我的问题是:
控制字符是否仍然在符合标准的编译器中实现,或者仅仅是标准不符合标准吗?
为清楚起见,这是我的输出 gfortran -v
Using built-in specs.
Target: powerpc-apple-darwin9
Configured with: ../gcc-4.4.0/configure --prefix=/sw --prefix=/sw/lib/gcc4.4 --mandir=/sw/share/man --infodir=/sw/share/info --enable-languages=c,c++,fortran,objc,java --with-gmp=/sw --with-libiconv-prefix=/sw --with-ppl=/sw --with-cloog=/sw --with-system-zlib --x-includes=/usr/X11R6/include --x-libraries=/usr/X11R6/lib --disable-libjava-multilib --build=powerpc-apple-darwin9 --host=powerpc-apple-darwin9 --target=powerpc-apple-darwin9
Thread model: posix
gcc version 4.4.0 (GCC)
M. *_* B. 10
在过去的几年中,忽略第一列的这种使用可能会导致行式打印机出现问题,例如页面弹出 - 但是最后一次看到行式打印机是什么时候?否则它是输出设备,编译器和OS依赖."Fortran 95/2003 for Scientists and Engineers"的建议在大约15或20年前表现出色.对于终端,后记和其他现代打印机,第一列不再特别.我不再特别注意第一栏了,我没有遇到麻烦.
Fortran 2003标准将托架控制列为已删除,这是Fortran语言标准很少做的事情.请参阅"Fortran 95/2003解释"的第359页或"The Fortran 2003手册"的第326页.也许用gfortran选择-std = f2003或-std = f2008将保证第1列不会被用作马车控制,因此"坏事"是完全不可能的.