メインコンテンツ

ファイルがコンパイルされません

ファイルにコンパイル エラーがあります

R2021a 以降

説明

この欠陥は、コンパイル エラーが原因で Polyspace がファイルを解析できない場合に発生します。この欠陥はファイルの先頭行の 1 列目に記載されます。この欠陥は、ファイルに 1 つ以上のコンパイル エラーがあることを示します。

実際のコンパイル エラーを見つけるには、解析ログを確認します。調査方法の詳細については、以下を参照してください。

このチェッカーを使用すると、総合解析でファイルにコンパイルの問題があるかどうか (Polyspace Bug Finder または Polyspace Bug Finder Server の場合) や、現在解析中のファイルがまだコンパイルされていないかどうか (Polyspace as You Code の場合) をひと目で確認できます。このチェッカーを使用することで、毎回解析ログを開いてコンパイル エラーの有無を調べる手間が省かれます。解析結果からファイルがコンパイルされなかったかどうかを判別できます。

リスク

通常、コンパイラはこの欠陥チェッカーが検出しない問題も検出することができます。

コンパイラでのファイルのコンパイルが成功しても、Polyspace 解析自体でのコンパイル段階で失敗する場合、これは、解析の構成でコンパイラが正確にエミュレートされていないことを意味します。たとえば、標準ライブラリ関数が未定義と見なされることから解析が失敗した場合、コンパイラ ヘッダーが格納されているフォルダーを明示的に指定し、polyspace-configure コマンドを使用してパスを抽出しなければ、構成を改善できない場合があります。

修正方法

解析ログ ファイルですべてのコンパイル エラーを識別して修正します。

すべて展開する

int nthFib (int n) {
    int i=0, sum=1;
    for (int iter = 0; iter < n; iter++) {
      int t = i;
      i = sum;
      sum += t;
    }
    return iter;
}

この例では、変数 iterfor ループでのみ定義されています。ただし、ループ外部の return ステートメントがこの変数を参照しているため、未定義の識別子エラーが発生します(変数 sum が返されることが意図されていたため、ここでのコンパイル エラーは論理エラーも示します)。

#include <cstdio>
#include <cstdlib>

void func() {
   char* message = (char*)malloc (strlen ("Hello, World\n")+1);
   strcpy (message, "Hello, World\n");
   printf ("%s", message);
   free (message);
}

この例では、文字列関数 strlen および strcpy が使用されていますが、ヘッダー ファイル cstring が含まれていません。これにより、関数が未定義であると見なされます。

結果情報

グループ: 適切な手法
言語: C | C++
既定値: Polyspace Bug Finder では無効、Polyspace as You Code では有効
コマンド ライン構文: FILE_DOES_NOT_COMPILE
影響度: Low

バージョン履歴

R2021a で導入

すべて展開する