このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
return ステートメントがありません
void
以外の戻り値の型を含む関数が一部のパスで値を返さない
説明
この欠陥は、関数が少なくとも 1 つの実行パスで値を返さない場合に発生します。この欠陥が発生しない場合:
関数の戻り値の型が
void
の場合。実行パスが
[[noreturn]]
関数などの実行の流れを戻さない関数によって終了される場合。C99 以上の C バージョンまたは C++ を使用している場合。C99 以上の C バージョンと C++ では、
main
関数は、戻り値が指定されていない場合には0
を暗黙的に返します。
リスク
関数のシグネチャに void
でない戻り値がある場合、値を返すことを想定しています。この関数の戻り値は以降の計算で使用される可能性があります。関数本体の実行が return
ステートメントのないパスを通過する場合、関数の戻り値は不確定になります。この戻り値を使用する計算は、予期しない結果につながる場合があります。
修正方法
ほとんどの場合、return
ステートメントを関数本体の最後に配置することで、この欠陥を修正できます。コードに実行の流れを戻さない実行パスが含まれている場合は、属性 [[noreturn]]
を使用してそれらを指定します。
または、関数本体のどの実行パスに return
ステートメントがないかを特定して、該当するパスに return
ステートメントを追加することができます。多くの場合、結果の詳細 (または Polyspace as You Code のソース コード ツールヒント) には欠陥につながる一連のイベントが表示されます。そのシーケンス内のどのイベントについても修正を実装できます。結果の詳細にイベント履歴が表示されない場合は、ソース コード内で右クリック オプションを使用して、欠陥に関連する変数のこれまでの参照を検索し、関連するイベントを検出できます。Polyspace デスクトップ ユーザー インターフェイスでの Bug Finder の結果の解釈またはPolyspace Access Web インターフェイスでの Bug Finder の結果の解釈 (Polyspace Access)も参照してください。
以下の修正例を参照してください。
問題を修正しない場合は、改めてレビューされないように結果またはコードにコメントを追加します。詳細は、以下を参照してください。
Polyspace ユーザー インターフェイスでのバグ修正または正当化による結果への対処 (Polyspace ユーザー インターフェイスで結果をレビューする場合)
Polyspace Access でのバグ修正または正当化による結果への対処 (Polyspace Access) (Web ブラウザーで結果をレビューする場合)。
コードへの注釈付けと既知の結果または許容可能な結果の非表示 (IDE で結果をレビューする場合)
解析により、プロセス終了関数が存在するパス上で return
ステートメントの欠落にフラグを設定する場合は、オプション -termination-functions
を使用して、プロセス終了関数が解析で認識されるようにできます。
例
結果情報
グループ: データ フロー |
言語: C | C++ |
既定値: オン |
コマンド ライン構文: MISSING_RETURN |
影響度:Low |