このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
スタブを生成する関数 (-functions-to-stub
)
解析時にスタブ化する関数の指定
説明
解析時にスタブ化する関数を指定します。
指定した関数に対し、Polyspace® は次のように動作します。
関数定義が存在している場合でもそれを無視します。
関数の入出力範囲として、その型に応じて許可されるすべての値を想定します。
オプションの設定
以下のいずれかの方法を使用してオプションを設定します。
Polyspace ユーザー インターフェイス (デスクトップ製品のみ): プロジェクト構成で [入力およびスタブ] ノードを選択してから、このオプションの関数名を入力します。
Polyspace Platform ユーザー インターフェイス (デスクトップ製品のみ): プロジェクト構成の [静的解析] タブで [入力およびスタブ] ノードを選択してから、このオプションの関数名を入力します。
コマンド ラインとオプション ファイル: オプション
-functions-to-stub
を使用します。コマンド ライン情報を参照してください。
このオプションを使用する理由
解析で関数本体のコードを無視する場合、関数をスタブ化できます。
次に例を示します。
関数の作成が完了していないため、解析で関数本体を考慮する必要はないとします。このオプションを使用して関数をスタブ化し、その戻り値と変更可能な引数に制約を指定できます。
関数本体の解析が不正確だとします。解析では、関数は戻り値の型に許容される可能性のある値をすべて返すと仮定されます。このオプションを使用して関数をスタブ化し、その戻り値に制約を指定できます。
設定
既定値なし
関数名を入力するか、一覧から選択します。
をクリックしてフィールドを追加し、関数名を入力します。
をクリックして、コード内の関数の一覧を表示します。その一覧から関数を選択します。
関数名を入力する際は、基本構文を使用するか、オーバーロードされた関数を区別するために引数構文を使用します。引数構文の場合は、関数の引数をセミコロンで区切ります。例については、次のコードと表を参照してください。
//simple function void test(int a, int b); //C++ template function Template <class myType> myType test(myType a, myType b); //C++ class method class A { public: int test(int var1, int var2); }; //C++ template class method template <class myType> class A { public: myType test(myType var1, myType var2); };
関数の種類 | 基本構文 | 引数構文 |
---|---|---|
単純な関数 | test | test(int; int) |
C++ テンプレート関数 | test | test(myType; myType) |
C++ クラス メソッド | A::test | A::test(int;int) |
C++ テンプレート クラス メソッド | A<myType>::test | A<myType>::test(myType;myType) |
ヒント
Code Prover は引数に関して仮定を行い、スタブ関数の値を返します。たとえば、Polyspace は、スタブ関数の戻り値を全範囲であると仮定します。これらの仮定はコードの他のセクションのチェックに影響することがあります。スタブ関数に関する Code Prover の仮定を参照してください。
関数をスタブ化すると、関数の引数と戻り値の範囲を制約することができます。制約を指定するには、解析オプション
[制約の設定] (-data-range-specifications)
を使用します。このオプションを使用すると、1 つ以上の関数本体が解析されなくなるため、行数やコメント密度などのファイルレベルのコード複雑度メトリクスに変化が現れる場合があります。
C 関数の場合、以下の特殊文字を使用できます。
( ) < > ; _
C++ 関数の場合、以下の特殊文字を使用できます。
( ) < > ; _ * & [ ]
空白文字は、C++ では使用できますが、C 関数では使用できません。
このオプションを使用して以下の C++ 関数のスタブを生成することはできません。
関数
constexpr
catch
句を関数本体全体に関連付ける function-try-block。次に例を示します。Class() try : Class( 0.0 ) //delegate constructor { // ... } catch (...) { // exception occurred on initialization }
パラメーター パックを使用したテンプレート関数。次に例を示します。
template <class T, class... T2> X(T n, T n2, T2... rest): X(rest...) { v.insert(v.begin(), n); v.insert(v.begin(), n2); }
戻り値の型が
auto
の関数。次に例を示します。template <typename F, typename... Args> inline decltype(auto) invoke(F&& func, Args&&... args) { return invoke_impl(eastl::forward<F>(func), eastl::forward<Args>(args)...); }
コマンド ライン情報
パラメーター: -functions-to-stub |
既定値なし |
値:
|
例 (Code Prover): polyspace-code-prover -sources |
例 (Code Prover Server): polyspace-code-prover-server -sources |