科学者とエンジニアのためのFortran95/ 2003の本では、フォーマットステートメントの最初の列が制御文字用に予約されていることを認識することの重要性について多くの話があります。インターネットでキャリッジ制御と呼ばれる制御文字も見ました。
混乱を避けるために、制御文字では、文字「1、空白(つまり、\ s)、0、および+」を、の最初の列(文字)に配置したときに出力の垂直方向の間隔に影響を与えるものとして参照します。 FORMATステートメント。
また、完全に固定幅の書体で書かれたこのテキストのみのWebページを参照してください:Fortranキャリッジ制御(等幅フォントの散文ほど正確さと古さを叫ぶものはないため)。私はこのページとそれが好きな他の人たちがはっきりしていないことに気づきました。
科学者およびエンジニア向けのFortran95/2003によると、最初の列がキャリッジ制御用に予約されていることを思い出せないと、意図しない恐ろしい出力が発生する可能性があります。デーブ・バリーを言い換えると、間違った文字を入力すると、ノルウェーで核ミサイルが発射されます。
しかし、この厳しい警告に固執しようとすると、gfortranは私が何について話しているのかわからないことがわかります。
いくつかのサンプルコードで私のポイントを説明させてください。円周率を印刷しようとしています。
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
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)