値を返さない関数チェックのレビューと修正
このトピックでは、Polyspace® Code Prover™ で [値を返さない関数] チェックの結果を体系的にレビューする方法を説明します。
[値を返さない関数] チェックの修正を判断するまでこれらの手順の 1 つ以上に従います。チェックおよびコードの例については、値を返さない関数
を参照してください。
すべてのチェックに適用される一般的なワークフローについては、Polyspace デスクトップ ユーザー インターフェイスでの Code Prover の結果の解釈またはPolyspace Access Web インターフェイスでの Code Prover の結果の解釈 (Polyspace Access)を参照してください。
手順 1: チェック情報の解釈
[結果のリスト] ペインで、チェックを選択します。[結果の詳細] ペインに、チェックに関する詳細が表示されます。
以下を表示できます。
チェックの直接の原因。
この例では、非
void
の戻り値の型の関数にreturn
ステートメントがない可能性があると識別されています。チェックの考えられる根本原因 (示されている場合)。
この例では、パスに関連している可能性があると識別されています。関数の呼び出しが複数存在し、少なくとも 1 つの呼び出しでチェックがグリーンになっています。
手順 2: チェックの根本原因の判定
return
ステートメントが特定の実行パスに存在しない理由を特定します。
return
ステートメントの関数本体を参照します。return
ステートメントが見つかったら、以下を実行します。return
ステートメントが関数内のブロックで発生するかどうかを確認します。たとえば、
return
ステートメントがif
ブロック内で発生するとします。if
ブロックに入らない実行パスでは、return
ステートメントがバイパスされます。return
ステートメントがバイパスされる実行パスを特定できるかどうかを確認します。たとえば、
return
ステートメントを含むif
ブロックが特定の関数入力でバイパスされる場合があります。関数がコードで複数回呼び出される場合、どの関数呼び出しが原因で
return
ステートメントがバイパスされるかを特定できます。オプション状況依存性を使用して、各関数呼び出しのチェックの色を確認します。
考えられる解決方法: 関数の戻り値の型が正しくない場合は変更します。それ以外の場合は、return
ステートメントをすべての実行パスに追加します。たとえば、if-else if-else
条件の一部の分岐にしか return
ステートメントがない場合は、残りの分岐に return
ステートメントを追加します。あるいは、return
ステートメントを if-else if-else
条件の外に追加します。