Windows用コンパイラ Linux/Unix/MAC用コンパイラ
関連情報
ホーム > 製品 > NAG Fortranコンパイラ > 他社とのエラー診断機能比較

診断性能比較

NAG Fortran コンパイラと他社製Fortranコンパイラの比較

NAG Fortranコンパイラは非常に強力なユーザプログラム診断機能を持っています。 この機能により初期化忘れを始めとするユーザプログラムの誤りを見つけ出す他、 ポータビリティーを考えた場合に重要なFortran標準規格への非準拠を見つけ出します。

この強力な診断機能は、多くのNAG Fortran コンパイラをご利用いただくお客様が、NAGを選択する際に大きなキーポイントになっています。

ここではいくつかのサンプルコードで、他社製コンパイラとの比較を行います。本比較はWindows版のNAG Fortranコンパイラ(Fortran Builder)とWindows上で稼働する他メーカーのFortranコンパイラを比較しています。

下記のそれぞれのプログラムについてエラーの検出状況を ○ と × で示しています。

引数の整合性1 - 配列引数の寸法が一致しない
NAG:○  他社I:×  他社P:×  gfortran:×

argMismatchArraySizeのスクリーンショット


引数の整合性2 - 文字引数の長さが一致しない
NAG:○  他社I:×  他社P:×  gfortran:×

argMismatchCharLenのスクリーンショット


引数の整合性3 - 同じファイル内での引数の型が一致しない
NAG:○  他社I:○  他社P:×  gfortran:×

argMismatchSameFileのスクリーンショット


引数の整合性4 - 異なるファイルで引数の型が一致しない
NAG:○  他社I:×  他社P:×  gfortran:×

argMismatchDifferentFileMainのスクリーンショット

argMismatchDifferentFileSubのスクリーンショット


関数とサブルーチンの混同1 - 同じファイル内の関数をサブルーチンとして呼び出し
NAG:○  他社I:○  他社P:×  gfortran:○

callFunctionAsSubroutineSameFileのスクリーンショット


関数とサブルーチンの混同2 - 異なるファイルの関数をサブルーチンとして呼び出し
NAG:○  他社I:○  他社P:×  gfortran:×

callFunctionAsSubroutineDifferentFileMainのスクリーンショット

callFunctionAsSubroutineDifferentFileSubのスクリーンショット


関数とサブルーチンの混同3 - 同じファイルのサブルーチンを関数として引用
NAG:○  他社I:○  他社P:×  gfortran:○

referenceSubroutineAsFunctionSameFileのスクリーンショット


関数とサブルーチンの混同4 - 異なるファイルのサブルーチンを関数として引用
NAG:○  他社I:○  他社P:×  gfortran:×

referenceSubroutineAsFunctionDifferentFileMainのスクリーンショット

referenceSubroutineAsFunctionDifferentFileSubのスクリーンショット


定数の変更 - 定数引数に値を代入
NAG:○  他社I:×  他社P:×  gfortran:×

assignToParameterPassedToSubroutineのスクリーンショット


配列サイズの整合性 - 寸法が異なる配列を代入
NAG:○  他社I:×  他社P:○  gfortran:○

incompatArraySizeAssignmentのスクリーンショット


領域外アクセス1 - 内部サブルーチンから配列の領域外をアクセス
NAG:○  他社I:○  他社P:○  gfortran:○

outOfBoundArrayAccessedFromInternalSubroutineのスクリーンショット


領域外アクセス2 - 大きさ引継ぎ配列の領域外をアクセス
NAG:○  他社I:×  他社P:×  gfortran:×

outOfBoundAssumedSizeArrayのスクリーンショット


領域外アクセス3 - 文字引数の領域外をアクセス
NAG:○  他社I:○  他社P:×  gfortran:○

outOfBoundCharacterPassedWithAstriskのスクリーンショット


DO制御変数1 - サブルーチン内でDOループ制御変数を変更
NAG:○  他社I:×  他社P:×  gfortran:×

doIterVarChangedInSubroutineのスクリーンショット


DO制御変数2 - EQUIVALENCE経由でDOループ制御変数を変更
NAG:○  他社I:×  他社P:×  gfortran:×

doIterVarChangedViaEquivalenceのスクリーンショット


ゼロ増分DO - DOループの刻みがゼロ
NAG:○  他社I:○  他社P:×  gfortran:×

doZeroStepSizeのスクリーンショット


初期化忘れ1 - 割付け配列の初期化忘れ
NAG:○  他社I:×  他社P:×  gfortran:×

uninitAllocatableArrayInSubroutineのスクリーンショット


初期化忘れ2 - 配列の部分的な初期化忘れ
NAG:○  他社I:×  他社P:×  gfortran:×

uninitArrayPartialのスクリーンショット


初期化忘れ3 - 大きさ引継ぎ配列の初期化忘れ
NAG:○  他社I:×  他社P:×  gfortran:×

uninitAssumeSizeArrayInSubroutineのスクリーンショット


初期化忘れ4 - 共通ブロックの初期化忘れ
NAG:○  他社I:×  他社P:×  gfortran:×

uninitCommonのスクリーンショット


初期化忘れ5 - 固定サイズの配列の初期化忘れ
NAG:○  他社I:×  他社P:×  gfortran:×

uninitFixedSizeArrayInSubroutineのスクリーンショット


初期化忘れ6 - 外部サブルーチンのINTENT(OUT)引数の初期化忘れ
NAG:○  他社I:○  他社P:×  gfortran:×

uninitIntentOutのスクリーンショット


初期化忘れ7 - 内部サブルーチンのINTENT(OUT)引数の初期化忘れ
NAG:○  他社I:○  他社P:×  gfortran:×

uninitIntentOutInternalSubのスクリーンショット


初期化忘れ8 - モジュール変数の初期化忘れ
NAG:○  他社I:×  他社P:×  gfortran:×

uninitModuleのスクリーンショット


初期化忘れ9 - 保存配列の初期化忘れ
NAG:○  他社I:×  他社P:×  gfortran:×

uninitSavedArrayInSubroutineのスクリーンショット


初期化忘れ10 - サブルーチンに渡されたスカラー変数の初期化忘れ
NAG:○  他社I:×  他社P:×  gfortran:×

uninitScalarPassedAsArgumentのスクリーンショット


ぶら下がったポインタ - 既に解放された領域にポインタを通じて代入
NAG:○  他社I:×  他社P:×  gfortran:×

danglingPtrのスクリーンショット

NAGコンパイラと他社の比較の集計結果

Diag


Privacy Policy | Trademarks