在科学家和工程师的Fortran 95/2003一书中,非常重要的一点是要认识到格式语句中的第一列保留用于控制字符。我也在互联网上看到过控制字符被称为换行控制。
为了避免混淆,我将“1、空格(即\s)、0和+”这些字符称为控制字符,当它们出现在第一个列(字符)的FORMAT语句中时,会对输出的垂直间距产生影响。
此外,请参考这个纯文本网页,完全使用等宽字体编写:Fortran换行控制(因为没有什么比等宽字体的散文更能表达准确性和古老感)。我发现这个页面和其他类似的页面并不太清晰。
根据科学家和工程师的Fortran 95/2003,忘记第一列是保留的换行控制符可能会导致可怕的意外输出。引用戴夫·巴里的话,输入错误字符,核导弹就会朝挪威发射。
然而,当我试图遵守这个严厉的警告时,我发现gfortran不知道我在说什么。
让我用一些示例代码来说明我的观点。 我正在尝试打印出Pi的值:
“1”和“0”并非笔误。看起来gfortran完全忽略了控制字符列。
我的问题是:
标准兼容的编译器是否仍然实现控制字符,还是gfortran不符合标准?
为了清晰起见,这是我的
为了避免混淆,我将“1、空格(即\s)、0和+”这些字符称为控制字符,当它们出现在第一个列(字符)的FORMAT语句中时,会对输出的垂直间距产生影响。
此外,请参考这个纯文本网页,完全使用等宽字体编写:Fortran换行控制(因为没有什么比等宽字体的散文更能表达准确性和古老感)。我发现这个页面和其他类似的页面并不太清晰。
根据科学家和工程师的Fortran 95/2003,忘记第一列是保留的换行控制符可能会导致可怕的意外输出。引用戴夫·巴里的话,输入错误字符,核导弹就会朝挪威发射。
然而,当我试图遵守这个严厉的警告时,我发现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
这是输出:
1New page: 3.141592741
Single Space: 3.141592741
0Double Space: 3.141592741
“1”和“0”并非笔误。看起来gfortran完全忽略了控制字符列。
我的问题是:
标准兼容的编译器是否仍然实现控制字符,还是gfortran不符合标准?
为了清晰起见,这是我的
gfortran -v
输出:
使用内置规范。
目标: powerpc-apple-darwin9
配置为: ../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
线程模型: posix
gcc版本4.4.0(GCC)