行とは、水平方向の文字配列です。 これに対して、桁は垂直方向の文字配列で、 特定の桁にあるそれぞれの文字 (マルチバイト文字の場合は各バイト) の位置は行内で 同じになります。
+----------------------------------IBM 拡張----------------------------------+
XL Fortran は、行の長さをバイト単位で表すので、 これらの定義が適用されるのは 1 バイト文字を含む行だけです。 マルチバイト文字の場合は、各バイトが 1 桁を占めます。
+------------------------------End of IBM 拡張-------------------------------+
行には以下の種類があります。
開始行 | ステートメントの先頭の行です。 |
継続行 | 開始行の次行以降にステートメントを継続させる行。 |
コメント行 | 実行可能プログラムに影響を与えないので、
説明の記入に使用することができます。
コメント・テキストは行の終わりまで継続します。
複数のコメント行を次々に継続させていくことはできます
が、1 つのコメント行を複数の行に渡って継続させることはできません。
行全体がホワイト・スペースの行または長さがゼロの行は、
テキストのないコメント行と見なされます。
コメント・テキストには、文字コンテキストで使用できる文字であれば、
どの文字でも入れることができます。
開始行または継続行を継続させない場合、あるいは 開始行または継続行を継続させるがその継続が文字コンテキスト内で 行われない場合、同じ行で、ステートメント・ラベル、ステートメント・テキスト、 および継続文字のいずれかに続けてインライン・コメントを入れることができます。 感嘆符 (!) は インライン・コメントの始まりを意味します。 |
* 条件付きコンパイル行 | 行がコンパイルされるのは、条件付きコンパイル行の認識が使用可能になっている場合だけであることを示します。 条件付きコンパイル標識は、条件付きコンパイル行になければなりません。 (条件付きコンパイルを参照してください。) * |
* デバッグ行 | その行がデバッグ・コード用であることを示します (固定ソース形式の場合のみ)。 XL Fortran では、1 桁目に D または X の文字が指定されていなければなりません。 (デバッグ行を参照してください。) * |
* ディレクティブ行 | XL Fortran では、コンパイラーに指示または情報を与えます (コメント形式ディレクティブを参照してください)。* |
+----------------------------------IBM 拡張----------------------------------+
XL Fortran では、ソース入力行は、固定形式と自由形式のどちらのソース形式でもかまいません。 同一のプログラム単位内でソース形式を混在させるには、SOURCEFORM ディレクティブを 使用します。 f77、fort77、xlf、xlf_r 呼び出しコマンドを使用する場合は、固定ソース形式がデフォルトになります。
xlf90、xlf90_r、xlf95、または xlf95_r 呼び出しコマンドを 使用する場合は、Fortran 90 自由ソース形式がデフォルトになります。
呼び出しコマンドの詳細については、「XL Fortran ユーザーズ・ガイド」の 『XL Fortran プログラムのコンパイル』を参照してください。
+------------------------------End of IBM 拡張-------------------------------+
+----------------------------------IBM 拡張----------------------------------+
固定ソース形式の行は、1 〜 132 文字の文字列です。 デフォルトの行サイズは (Fortran 95 に規定されているとおり) 72 文字ですが、 XL Fortran では、 -qfixed=right_margin コンパイラー・オプションを使用して変更することができます (「XL Fortran ユーザーズ・ガイド」を参照してください)。
+------------------------------End of IBM 拡張-------------------------------+
右マージンを超える列は、行の一部ではないので、識別、 順序付け、またはその他の目的に使用できます。
文字コンテキスト内でなければ、ホワイト・スペースは意味を持ちません。 つまり、ホワイト・スペースを字句トークン内または 字句トークンの間に埋め込むことができます。 このような使い方をしてもコンパイラーの それらの字句トークンの扱い方に影響はありません。
+----------------------------------IBM 拡張----------------------------------+
タブ形式設定では、 XL Fortran の開始行の 1 〜 6 行目にタブ文字があることを意味します。 これは、タブ文字の次の文字を 7 桁目から始めることを解釈するように、 コンパイラーに指示します。
+------------------------------End of IBM 拡張-------------------------------+
固定ソース形式の行における行および項目の要件は以下のとおりです。
+----------------------------------IBM 拡張----------------------------------+
+------------------------------End of IBM 拡張-------------------------------+
+----------------------------------IBM 拡張----------------------------------+
XL Fortran では、1 桁目に D (デバッグ行を示す) を入れることができます。 D を入れない場合には、1 〜 5 桁目には文字コンテキスト内で 使用できるどのような文字でも入れることができますが、その文字は無視されます。
+------------------------------End of IBM 拡張-------------------------------+
+----------------------------------IBM 拡張----------------------------------+
+------------------------------End of IBM 拡張-------------------------------+
セミコロン (;) は、文字コンテキストの中、コメントの中、 または 1 〜 6 桁目に使用した場合以外は、単一ソース行上の ステートメントを区切る役割を果たします。 同じ行に 2 つ以上のセミコロン・セパレーターがあり、 それらがホワイト・スペースまたは別のセミコロンで区切られている場合は、 単一のセパレーターと見なされます。 セパレーターが行の最後にある場合やインライン・コメントの前にある場合は、 そのセパレーターは無視されます。 同じ行の中で、セミコロンに続くステートメントに、 ラベルを付けることはできません。 同じ行の中で、追加のステートメントをプログラム単位 の END ステートメントに続けることはできません。
+----------------------------------IBM 拡張----------------------------------+
デバッグ行は、固定ソース形式のみが使用可能であり、 デバッグ用に使用されるソース・コードが入っています。 このデバッグ行は、XL Fortran では、文字 D または 1 桁目の文字 X によって指定されます。 デバッグ行の処理は、コンパイラー・オプション -qdlines または -qxlines によって異なります。
デバッグ・ステートメントが複数の行にまたがっている場合は、 継続行の 1 桁目に D または X のような継続文字を指定しなければなりません。 開始行がデバッグ行でない場合でも、継続行をデバッグ行として指定することができます。 ただし、-qdlines または -qxlines コンパイラー・オプションを指定したかどうかにかかわらず、 ステートメントの構文は正しくなければなりません。
+------------------------------End of IBM 拡張-------------------------------+
C Column Numbers: C 1 2 3 4 5 6 7 C23456789012345678901234567890123456789012345678901234567890123456789012 !IBM* SOURCEFORM (FIXED) CHARACTER CHARSTR ; LOGICAL X ! 2 statements on 1 line DO 10 I=1,10 PRINT *,'this is the index',I ! with an inline comment 10 CONTINUE C CHARSTR="THIS IS A CONTINUED X CHARACTER STRING" ! There will be 38 blanks in the string between "CONTINUED" ! and "CHARACTER". You cannot have an inline comment on ! the initial line because it would be interpreted as part ! of CHARSTR (character context). 100 PRINT *, IERROR ! The following debug lines are compiled as source lines if ! you use -qdlines D IF (I.EQ.IDEBUG.AND. D + J.EQ.IDEBUG) WRITE(6,*) IERROR D IF (I.EQ. D + IDEBUG ) D + WRITE(6,*) INFO END
自由ソース形式の行では、1 行に 132 文字まで指定する ことができ、1 ステートメントに最大で 39 までの継続行が指定できます。
+----------------------------------IBM 拡張----------------------------------+
XL Fortran では、文字数が 6700 を超えなければ、 行の長さや継続行の数を任意に指定することができます。
+------------------------------End of IBM 拡張-------------------------------+
項目は行の任意の桁位置から始めることができ、行および行に関する項目の次の要件を満たしています。
単一ソース行の複数のステートメントは、セミコロンで区切ります。 ただしセミコロンが文字コンテキスト中またはコメントに現れる場合を除きます。 同じ行に 2 つ以上のセパレーターがあり、それらがホワイト・スペースまたは別のセミコロンで区切られている 場合は、単一のセパレーターと見なされます。 セパレーターが行の最後にある場合やインライン・コメントの前にある場合は、 そのセパレーターは無視されます。 同じ行の中で、追加のステートメントをプログラム単位の END ステートメントに続けることはできません。
ホワイト・スペースは、字句トークン内に入れることはできません。 ただし文字コンテキスト内または形式指定内は除きます。 ホワイト・スペースは、読みやすさを向上させるために、トークンの間に自由に挿入できます。 ただし、名前、定数、ラベルを、隣接するキーワード、名前、定数、ラベルから区切るものでなければなりません。
隣接する特定のキーワード間でホワイト・スペースが必要となる場合があります。 以下の表では、ホワイト・スペースが必須であるキーワード、およびホワイト・スペースがオプションである キーワードをリストしています。
BLOCK DATA | END FUNCTION | END SUBROUTINE |
DOUBLE COMPLEX | END IF | END TYPE |
DOUBLE PRECISION | END INTERFACE | END UNION |
ELSE IF | END MAP | END WHERE |
END BLOCK DATA | END MODULE | GO TO |
END DO | END PROGRAM | IN OUT |
END FILE | END SELECT | SELECT CASE |
END FORALL | END STRUCTURE |
|
type_spec の詳細については、 型宣言を参照してください。
!IBM* SOURCEFORM (FREE(F90)) ! ! Column Numbers: ! 1 2 3 4 5 6 7 !23456789012345678901234567890123456789012345678901234567890123456789012 DO I=1,20 PRINT *,'this statement& & is continued' ; IF (I.LT.5) PRINT *, I ENDDO EN& &D ! A lexical token can be continued
+----------------------------------IBM 拡張----------------------------------+
IBM 自由ソース形式の行またはステートメントは、 最大で 6700 文字までの文字列です。 項目は行の任意の桁位置から始めることができ、行および行に関する項目の次の要件を満たしています。
開始行または継続行上のステートメント・テキストを継続させる場合、 負符号を使用して、ステートメント・テキストが次の行に継続することを示します。 文字コンテキスト中で、継続させるステートメント・テキストの 最後の文字が負符号の場合、継続文字としてもう 1 つの 負符号を入力する必要があります。
文字コンテキスト内でなければ、ホワイト・スペースは意味を持ちません。 つまり、ホワイト・スペースを字句トークン内または 字句トークンの間に埋め込むことができます。 このような使い方をしてもコンパイラーの それらの字句トークンの扱い方に影響はありません。
!IBM* SOURCEFORM (FREE(IBM)) " " Column Numbers: " 1 2 3 4 5 6 7 "23456789012345678901234567890123456789012345678901234567890123456789012 DO I=1,10 PRINT *,'this is - the index',I ! There will be 14 blanks in the string ! between "is" and "the" END DO END
+------------------------------End of IBM 拡張-------------------------------+
+----------------------------------IBM 拡張----------------------------------+
XL Fortran プログラムの特定の行を条件付きコンパイルするようマークするには、 標識を使用します。 このサポートを使用すれば、SMP 環境内だけで有効なステートメント または SMP 環境内だけで必要なステートメントが入っているコードを、 非 SMP 環境に移植することができます。これを行うには、条件付きコンパイル行を使用するか、 _OPENMP C プリプロセッサー・マクロを使用します。
条件付きコンパイル行の構文は、次のとおりです。
>>-cond_comp_sentinel--fortran_source_line---------------------><
条件付きコンパイル行の構文規則は、 固定ソース形式行と自由ソース形式行の構文規則とよく似ています。 構文規則は、次のとおりです。
有効な XL Fortran ソース行が、条件付きコンパイル標識に 続いていなければなりません。
条件付きコンパイル行には、INCLUDE 非コメント・ディレクティブ または EJECT 非コメント・ディレクティブが入っていても構いません。
条件付きコンパイル標識には、組み込みホワイト・スペースが 入っていてはなりません。
条件付きコンパイル標識は、同一行のソース・ステートメントまたは ディレクティブの後に置くことはできません。
条件付きコンパイル行を継続させる場合は、条件付きコンパイル標識が、 少なくとも 1 つの継続行か先頭の行になければなりません。
条件付きコンパイル行が認識されるようにするには、 -qcclines コンパイラー・オプションを指定する必要があります。 条件付きコンパイル行が認識されないようにするには、 -qnocclines コンパイラー・オプションを指定します。 -qsmp=omp コンパイラー・オプションを指定すると、 -qcclines オプションを指定できるようになります。
トリガー・ディレクティブは、条件付きコンパイル標識に優先します。 たとえば、-qdirective='$' オプションを指定すると、 !$ などのトリガーで始まる行は、 条件付きコンパイル行ではなくコメント・ディレクティブとして扱われます。
条件付きコンパイル標識は、1 桁目から始まっていなければなりません。
固定ソース形式行の長さ、大/小文字の区別、ホワイト・スペース、継続、 タブ形式設定、および桁についてのすべての規則が適用されます。 詳細については、固定ソース形式を参照してください。 条件付きコンパイル行が認識されるようになる場合は、 条件付きコンパイル標識は 2 つのホワイト・スペースによって置き換えられます。
条件付きコンパイル標識は、どの桁から始まっていても構いません。
自由ソース形式行の長さ、大/小文字の区別、ホワイト・スペース、 継続についてのすべての規則が適用されます。 詳細については、自由ソース形式を参照してください。 条件付きコンパイル行が認識されるようになる場合は、 条件付きコンパイル標識は 2 つのホワイト・スペースによって置き換えられます。
コードを条件付きで組み込むための別の方法 (条件付きコンパイル行を使用する 方法以外) は、C プリプロセッサー・マクロ _OPENMP を使用する方法です。 このマクロが定義されるのは、C プリプロセッサーが呼び出され、-qsmp=omp コンパイラー・オプションを 指定したときです。 このマクロの使用方法の例については、「XL Fortran ユーザーズ・ガイド」の節 『XL Fortran プログラムの編集、コンパイル、リンク、実行』の中の 『C プリプロセッサーによる Fortran ファイルの引き渡し』を参照してください。
次の例では、条件付きコンパイル行が、 OpenMP 実行時ルーチンを隠すために使用されています。 OpenMP 実行時ルーチンを呼び出すコードは、非 OpenMP 環境で 条件付きコンパイルを使用しないで簡単にコンパイルすることはできません。 実行時ルーチンに対する呼び出しはディレクティブではないので、 これらの呼び出しを !$OMP トリガーによって隠すことはできません。 以下のコードを -qsmp=omp コンパイラー・オプションを指定せずに コンパイルすると、スレッドの数を保管するために使用される変数には、 値 8 が割り当てられます。
PROGRAM PAR_MAT_MUL IMPLICIT NONE INTEGER(KIND=8) ::I,J,NTHREADS INTEGER(KIND=8),PARAMETER ::N=60 INTEGER(KIND=8),DIMENSION(N,N) ::AI,BI,CI INTEGER(KIND=8) ::SUMI !$ INTEGER OMP_GET_NUM_THREADS COMMON/DATA/ AI,BI,CI !$OMP THREADPRIVATE (/DATA/) !$OMP PARALLEL FORALL(I=1:N,J=1:N) AI(I,J) = (I-N/2)**2+(J+N/2) FORALL(I=1:N,J=1:N) BI(I,J) = 3-((I/2)+(J-N/2)**2) !$OMP MASTER NTHREADS=8 !$ NTHREADS=OMP_GET_NUM_THREADS() !$OMP END MASTER !$OMP END PARALLEL !$OMP PARALLEL DEFAULT(PRIVATE),COPYIN(AI,BI),SHARED(NTHREADS) !$OMP DO DO I=1,NTHREADS CALL IMAT_MUL(SUMI) ENDDO !$OMP END DO !$OMP END PARALLEL END
+------------------------------End of IBM 拡張-------------------------------+