富士通ソフトウェアテクノロジーズ

 目次 |  PGRelief C/C++ をご使用になる前に |  体験版編 |  インストール編 |  起動編 |  プロジェクト編 |  設定編 |  解析編 |  表示編 |  コマンド起動編 |  ヘルプ編 |  ツール編 |  解析時間を短縮する方法 |


PGRelief C/C++
FAQ

解析編

  1. コンパイルエラーのあるソースプログラムを解析できますか?
  2. 解析エラーになり解析できません
  3. gccの資産を解析すると、解析エラーになってしまいます
  4. 標準インクルードファイルで解析エラーが発生しないようにできますか?
  5. ファイル間解析とは何ですか?
  6. C++で記述されたソースがファイル間解析されません

1. コンパイルエラーのあるソースプログラムを解析できますか?

解析できません。コンパイルエラーのない状態にしてからご利用ください。

2. 解析エラーになり解析できません

解析エラーの中には、設定によって回避できる場合があります。
「設定」-「プロジェクト固有オプションの設定」メニューで、以下の設定を見直してから、解析し直してください。

  • コンパイラ設定
    適切なコンパイラ種別が設定されているか確認してください。コンパイラ種別を設定すると、そのコンパイラの持つANSI 規格外の固有構文の回避設定が行われます。
    コンパイラ種別に設定する内容については、『設定編』-『2.コンパイラ種別は何を指定すればいいですか?』を参照してください。

    コンパイラ種別を設定する詳細な手順については、下記のヘルプトピックを参照してください。
    [PGReliefを使う]-[高度な使い方]-[オプションの設定をする]-[コンパイラ種別を設定する]
  • インクルード設定
    以下のメッセージが表示される場合、インクルードパスの設定が足りないことが考えられます。
    「pgr0401 ファイル "xxxxx" が見つかりません。」 インクルードファイルが存在するパスがすべて設定されているか確認してください。また、実コンパイル環境と同じ順序でディレクトリが検索されるよう、上下ボタンを利用して検索順序を変更してください。

    参考:自作のヘッダーファイルが格納されているディレクトリを「私用インクルード」に、コンパイラ提供のものは「標準インクルード」に設定してください。
  • マクロ設定
    適切なコンパイラ種別を設定しても解析エラーが発生する場合は、処理系に依存する記述(定義済みマクロやキーワードなど)が回避しきれていないことが考えられます。コンパイラ付属のドキュメントなどをご参照のうえ、処理系に依存する記述をマクロ定義で回避し、解析を行ってください。
    1. 組み込み型の追加
      独自に追加された組み込み型(基本データ型)を、ANSI規格で定義されている 基本データ型に読み替えることにより回避します。

      例:#define XXXX yyyy の場合
        XXXX=yyyy というマクロの定義を追加します。

      例:ZZZZ キーワードを読み飛ばす場合
        ZZZZ= というマクロの定義を追加します。
    2. マクロ定義の追加
      コンパイラが自動的に付加するマクロ定義を、明に指定することにより回避できます。

      マクロ定義の詳細な手順については、下記のヘルプトピックを参照してください。
      [PGReliefを使う]-[高度な使い方]-[オプションの設定をする]-[マクロを設定する]
  • #if
    以下のようにソースプログラムを変更し、エラーとなる部分を解析対象から除外することで解析できる場合があります。

    #if !defined(__PGRELIEF__)
    ・・・解析エラーとなるコンパイラ固有の構文
    #else
    ・・・代替え構文
    #endif

    あらかじめマクロ設定で __PGRELIEF__を設定してください。

それでも解決しない場合には、サポート窓口までご連絡ください。その際には、お使いのコンパイラの名称・バージョンをお知らせください。

3. gccの資産を解析すると、解析エラーになってしまいます

まず、「設定」-「プロジェクト固有オプションの設定」メニューで、以下の設定を見直してから、解析し直してください。

  • コンパイラ設定
    GNU 配下の GCC のコンパイラ種別を選択してください。
  • インクルード設定
    コンパイラ提供のものは「標準インクルード」に、自作のヘッダファイルが格納されているディレクトリは「私用インクルード」に設定してください。
    なお、「標準インクルード」設定時には、gccのコンパイル環境にて cpp -v コマンドを実行して、インクルードパスの検索順序を確認し、同様の順序となるように設定してください。
  • マクロ設定
    gcc のコンパイル時に指定している-Dオプションがある場合に指定してください。

それでも解決しない場合には、お客様の開発環境に合わせた「コンパイラ種別ファイル」を適用することにより、解析エラーを回避することができます。
上記コンパイラ種別ファイルを作成させて頂きますので、サポート窓口にご連絡ください。

参考:コンパイラ種別ファイルの作成、提供は無償です。

4. 標準インクルードファイルで解析エラーが発生しないようにできますか?

代替インクルードファイルを作成し、その格納先を標準インクルードディレクトリに設定することで対処可能です。

参考:この方法は、インクルードの記述が #include <...> の場合に有効です。

  • 代替インクルードファイルとは

    解析エラーが発生する標準インクルードファイルのコピーに対して、解析エラーが発生しないように修正したインクルードファイルです。このファイルはお客様に作成していただく必要があります。
  • 代替インクルードファイルの格納先を追加するには

    1. 代替インクルードファイルが c:¥alt¥include ディレクトリにあり
    2. 標準インクルードファイルが c:¥std¥include ディレクトリにあるとき

    「標準インクルードディレクトリ」に上記 a., b. を登録します。
    このとき、標準インクルードディレクトリの一覧で a. が b. よりも上に登録されるように「上」「下」ボタンを使って調整してください。その後、通常の手順で解析を行ってください。

    インクルード設定の詳細な手順については、下記のヘルプトピックを参照してください。
    [PGReliefを使う]-[高度な使い方]-[オプションの設定をする]-[インクルードを設定する]

5. ファイル間解析とは何ですか?

ソースファイル間の関係の指摘などを解析します。

例えば、以下のようなチェックを行います。

  • グローバル変数が重複定義されていないか
  • 関数呼出し時に引数の型の整合性がとれているか

6. C++で記述されたソースがファイル間解析されません

C++で記述されたソースはファイル間解析の対象になりません。