メインコンテンツ

不明な関数プロトタイプに関する Polyspace コンパイル エラーの修正

問題

コンパイル段階で、不明な関数プロトタイプに関する警告またはエラー メッセージが表示されます。

the prototype for function 'myfunc' is unknown
このメッセージは、Polyspace® で関数プロトタイプが見つからないことを示しています。そのため、関数の引数と戻り値のデータ型を特定できず、関数の呼び出しから推測しなければなりません。

そのような関数のデータ型を特定するために、Polyspace は次の C99 規格に準拠しています。ISO/IEC 9899:1999, Chapter 6.5.2.2: Function calls

  • 戻り値の型は int であると仮定されます。

  • 引数の数と型は関数の最初の呼び出しで決まります。たとえば、最初の呼び出しで関数が double 型の引数を 1 つ受け取る場合、以降の呼び出しでも double 型の引数を 1 つ受け取ると仮定されます。以降の呼び出しで int 型の引数を渡すと、int から double への変換が行われます。

異なるコンパイル ユニットの間で引数の数と型や戻り値の型に不一致があると、リンク作成段階で検証が停止します。詳細については、異なる翻訳単位での競合する宣言に関する Polyspace リンク作成エラーの修正を参照してください。

原因

対象のソース コードに関数プロトタイプが含まれていません。たとえば、Polyspace で見つからないインクルード ファイルで関数が宣言されている場合などです。

ソース コードで #include されたインクルード ファイルが Polyspace プロジェクトに追加されていない場合、事前の警告が表示されます。

Warning: could not find include file "my_include.h"

解決法

ソース リポジトリで関数宣言を検索します。

関数宣言がインクルード ファイルで見つかったら、そのインクルード ファイルを含むフォルダーを追加します。

  • Polyspace デスクトップ製品のユーザー インターフェイスで、このフォルダーをプロジェクトに追加します。

    詳細については、ユーザー インターフェイスでの Polyspace の実行を参照してください。

  • コマンド ラインで、コマンド polyspace-code-prover にフラグ -I を使用します。

    詳細は、-I を参照してください。