インテル® Fortran コンパイラー 19.0 デベロッパー・ガイドおよびリファレンス
インテル® Fortran コンパイラーは、ソースプログラムに含まれる構文エラーと言語規則違反を識別します。
ソースファイルの処理中に報告された診断結果を示すメッセージです。診断メッセージは、通常、エラーの原因を判断し、修正するために十分な情報を提供します。通常、メッセージの形式は次のとおりです。
filename(linenum): severity #error number: message
項目 |
説明 |
---|---|
filename |
現在処理しているソースファイルの名前です。 |
linenum |
問題が検出されたソース行番号です。 |
severity |
診断メッセージの重要度 (警告、エラー、または致命的なエラー) を示します。 |
message |
問題の説明です。 |
以下は、エラーメッセージの例です。
echar.for(7): エラー #6321: 終了していないブロックが存在しています。 DO I=1,5 -------^
ポインター (---^) は、プログラムのソース行でエラーが発見された場所を示します。この場合は、END DO 文が省略されています。
コマンドラインで実行される受け渡しを表示するには、watch コンパイラー・オプションを指定します。
明示的インターフェイスが提供されていないルーチン間で、コンパイル時のプロシージャー・インターフェイス・チェックを実行することができます。そのためには、コンパイルされる各ルーチンでインターフェイスを持つモジュールを生成 (gen-interfaces コンパイラー・オプションを使用) して、暗黙的インターフェイスをチェック (warn[:]interfaces を使用) します。
いくつかのコンパイラー・オプションを使用して、コンパイラーにより発行される診断メッセージを制御することができます。例えば、WB コンパイラー・オプションは、コンパイル時の上下限チェック違反を警告として扱います。コンパイラー診断メッセージ (警告メッセージなど) を制御するには、warn を使用します。このオプションは、コンパイラーにより発行される警告を制御し、さまざまな keyword をサポートします。その中のいくつかを次に紹介します。
[no]alignments: 自然にアライメントされないデータに対する警告を発行するかどうかを指定します。
[no]declarations: 未宣言のシンボルに対する警告を発行するかどうかを指定します。
[no]errors: 警告メッセージをエラーメッセージに変更するかどうかを指定します。
[no]general: 警告メッセージおよび情報メッセージをコンパイラーで発行するかどうかを指定します。
[no]interfaces: 呼び出したすべての SUBROUTINES および起動したすべての FUNCTIONS のインターフェイスについての警告をコンパイラーで発行するかどうかを指定します。
[no]stderrors: Fortran 標準に違反する警告をエラーとして扱うかどうかを指定します。
[no]truncated_source: ソースが固定形式ソースファイルの最大のカラム幅を超えた場合、警告を発行するかどうかを指定します。
詳細は、warn コンパイラー・オプションを参照してください。
-diag (Linux* および macOS*) または /Qdiag (Windows*) コンパイラー・オプションを使用して、診断情報の表示を制御することもできます。このオプションは、複数の引数や値を受け付けるため、表示される診断メッセージおよびレポートを幅広く制御することができます。
最も一般的なものは以下のとおりです。
Linux* および macOS* |
Windows* |
説明 |
---|---|---|
-diag-enable=list |
/Qdiag-enable:list |
診断メッセージまたはメッセージのグループを有効にします。 |
-diag-disable=list |
/Qdiag-disable:list |
診断メッセージまたはメッセージのグループを無効にします。 |
-diag-warning=list |
/Qdiag-warning:list |
診断を警告に変更するようにコンパイラーに指示します。 |
-diag-error=list |
/Qdiag-error:list |
診断をエラーに変更するようにコンパイラーに指示します。 |
-diag-remark=list |
/Qdiag-remark:list |
診断をリマーク (コメント) に変更するようにコンパイラーに指示します。 |
list 項目は、warn、remark、error のいずれかのキーワード、特定のグループを指定するキーワード (par、vec、driver、cpu-dispatch)、または特定の診断 ID をカンマ区切りで指定します。詳細は、diag、Qdiagを参照してください。
また、次の関連オプションを使用できます。
Linux* および macOS* |
Windows* |
説明 |
---|---|---|
-diag-dump |
/Qdiag-dump |
有効なすべての診断メッセージを出力して、コンパイルを停止するようにコンパイラーに指示します。 |
-diag-file[=file] |
/Qdiag-file[:file] |
診断結果をファイルに出力します。 |
-diag-file-append[=file] |
/Qdiag-file-append[:file] |
診断結果をファイルに追加します。 |
-diag-error-limit=n |
/Qdiag-error-limit:n |
コンパイルを中断するまでに表示するエラー数を指定します。 |
リンカーにより、オブジェクト・モジュールのリンク時にエラーが検出されると、その原因と重要度に関するメッセージが表示されます。何らかのエラーが発生した場合、リンカーは実行ファイルを生成しません。リンカーメッセージは説明的な内容であるため、通常、追加情報がなくてもエラーを特定することができます。
コマンドライン上でリンカーに渡されるライブラリーを参照するには、watch を指定します。
これらのメッセージは、コンパイルされる言語で有効ではあるものの、推奨されない使用方法を報告します。デフォルトでは、コンパイラーはコメントを表示します。warn[:]nousage を使用して、コメントメッセージを抑止できます。
コメントメッセージが返されても、変換処理やリンク処理が終了することはなく、出力ファイルへの影響もありません。コメントメッセージとしては、例えば次のものがあります。
Null CASE construct (CASE 構文が NULL です。) The use of a non-integer DO loop variable or expression (整数以外の DO ループ変数または式を使用しています。) Terminating a DO loop with a statement other than CONTINUE or ENDDO (DO ループの終わりが CONTINUE または ENDDO 以外の文になっています。)
これらのメッセージは、コンパイルされる言語で有効ではあるものの、何らかの問題がある使用方法を報告します。デフォルトでは、コンパイラーは警告を表示します。ただし、nowarn を使用して、警告メッセージを抑止できます。警告メッセージが表示されても、変換もリンクも停止されません。また、警告メッセージが表示されても出力ファイルは影響を受けません。警告メッセージの代表的なものは、次のとおりです。
constant truncated - precision too great (定数が切り捨てられています。精度が高すぎます。) non-blank characters beyond column 72 ignored (カラム 72 以降のブランクではない文字は無視されます。) Hollerith size exceeds that required by the context (Hollerith のサイズが、コンテキストで必要とされるサイズを超えています。)
これらのメッセージでは、Fortran の構文上またはセマンティクス上の使用の誤りを報告します。エラーが発生すると、エラーを含むファイルのオブジェクト・コードは作成されず、リンクも行われませんが、ほかのエラーのスキャンは続行されます。次に、エラーメッセージの典型的な例をいくつか示します。
line exceeds 132 characters (行内の文字が 132 字を超えています。) unbalanced parenthesis (括弧が一致しません。) incomplete string (文字列が不完全です。)
致命的なメッセージは環境の問題を示します。致命的なエラー状態が発生すると、変換処理、アセンブリー処理、およびリンク処理は停止します。致命的なエラーによってコンパイルが終了した場合は、コンパイラーは標準のエラー出力に終了メッセージを表示します。致命的なエラーメッセージの代表的なものとしては、次のものがあります。
Disk is full, no space to write object file (ディスクが一杯で、オブジェクト・ファイルを書き込むためのスペースがありません。) Too many segments, object format cannot support this many segments (セグメントが多すぎます。オブジェクト形式ではこのような多くのセグメントはサポートできません。)
コマンドラインを使用している場合は、メッセージが標準のエラー出力ファイルに書き込まれます。コマンドラインを使用する場合:
compilervars.sh ファイル (Linux* および macOS*) または COMPILERVARS.BAT ファイル (Windows*) を実行して、適切な環境変数が設定されていることを確認してください。Windows* では、インテル® Visual Fortran のプログラムフォルダーから Fortran コマンド・プロンプト・ウィンドウを使用する場合、このような環境変数は事前に設定済みです。コンパイル中に ifort コマンドにより使用される環境変数のリストについては、「サポートされる環境変数」を参照してください。
リンクするライブラリーは、コンパイラー・オプションを使用して指定してください。
コマンドラインでファイル名としてライブラリーを指定することができます (必要に応じてパスを追加します)。
Microsoft* Visual Studio* 統合開発環境 (IDE) を使用している場合は、コンパイラー・エラーとリンカーエラーは [出力] ウィンドウの [ビルド] ペインに表示されます。[出力] ウィンドウを表示するには、[表示] > [その他のウィンドウ] > [出力] を選択します。[タスク一覧] ウィンドウ ([表示] > [その他のウィンドウ] > [タスク一覧]) を使用して、ビルド処理中に発生した問題へのリンクを表示することもできます。タスクをクリックすると、ビルドの問題が発生したコードに移動します。詳細をビルドログで確認することもできます。
エラーを起こしているソース行を素早く特定するには、次の操作を行います。
[出力] ウィンドウの [ビルド] ペインで、エラーメッセージをダブルクリックします。
または
F8 キーを押します。エディターウィンドウが表示され、左側の余白にエラーを起こしている行を示す印が表示されます。F8 キーを使用して、その他のエラーをスクロールして表示できます。
前回のビルドで報告されたコンパイラー・エラーをすべて修正した後、[ビルド] メニューから、[プロジェクト名のビルド] を選択します。変更されたファイルと、変更されたインクルード・ファイルまたはモジュールファイルを参照しているファイルのみ、ビルドエンジンにより再コンパイルされます。プロジェクト内のすべてのファイルがエラーを発生せずにコンパイルされると、ビルドエンジンによりオブジェクト・ファイルとライブラリーがリンクされ、実行ファイルまたはライブラリーが作成されます。
[ビルド] メニューから、[プロジェクト名のビルド] を選択すると、ビルドエンジンにプロジェクト内のすべてのソースファイルを再コンパイルさせることができます。これにより、すべてのソースコードがクリーンであることが保証され、特に makefile を使用している場合や、プロジェクトのすべてのファイルに対して新しいコンパイラー・オプションを使用するような場合などに役立ちます。
IDE を使用する場合:
正しいパス、ライブラリー、インクルード・ディレクトリーが指定されていることを確認してください。詳細は、「パス、ライブラリー、インクルード・ディレクトリーの指定」を参照してください。
[プロジェクト] > [プロパティ] から表示されるインテル® Fortran プロパティー・ページでコンパイラー・オプションを利用できない場合、[Command Line (コマンドライン)] カテゴリーでオプションを入力できます。ウィンドウの下の部分にある [Additional Options (追加のオプション)] を使用して、コマンドラインの要領で入力してください。例えば、リンカーオプションの /link /DEFAULTLIB を入力して追加のライブラリーを指定できます。
コンパイル時のエラーに関する質問は、インテル® Fortran フォーラム (https://software.intel.com/en-us/forum (英語)) までお寄せください。