MISRA C:2012 Dir 4.13
Functions which are designed to provide operations on a resource should be called in an appropriate sequence
説明
このチェッカーは、既定の Polyspace® as You Code 解析では非アクティブにされます。Polyspace as You Code 解析で非アクティブにされるチェッカー (Polyspace Access)を参照してください。
命令の定義
Functions which are designed to provide operations on a resource should be called in an appropriate sequence 1 .
根拠
通常、リソース上で動作する関数は、次の方法で使用されます。
リソースを割り当てます。
たとえば、ファイルやクリティカル セクションを開きます。
リソースを使用します。
たとえば、ファイルから読み取るかクリティカル セクションで操作を実行します。
リソースの割り当てを解除します。
たとえば、ファイルやクリティカル セクションを閉じます。
関数が予想どおりに動作するよう、手順を順番に実行します。たとえば、リソース割り当て関数をある特定の実行パスで呼び出す場合、そのパスでは割り当て解除関数を呼び出さなければなりません。
Polyspace 実装
Polyspace Bug Finder™ では、マルチタスキング オプションが指定され、かつコードに次の欠陥のいずれかが含まれている場合、このルールへの違反が検出されます。
ロックの欠落:タスクが対応するロック関数を呼び出す前に、ロック解除関数が呼び出される。ロック解除されていません:タスクはロック関数を呼び出すが、対応するロック解除関数を呼び出さずに終了する。ダブル ロック:タスクはロック関数を 2 度呼び出すが、ロック解除関数の中間呼び出しがない。ロック解除が重複しています:タスクはロック解除関数を 2 度呼び出すが、ロック関数の中間呼び出しがない。
マルチタスキング オプションについての詳細は、マルチタスキングを参照してください。
チェッカーの拡張
Polyspace ではサポートされていないマルチスレッド関数を使用する場合があります。その場合、マルチスレッド関数の各関数を、それぞれに対応する既知の POSIX® 関数にマッピングすることで、このチェッカーを拡張します。サポートされていないマルチスレッド環境への同時実行欠陥チェッカーの拡張を参照してください。
トラブルシューティング
ルール違反を想定していてもその違反が表示されない場合、コーディング規約違反が想定どおりに表示されない理由の診断を参照します。
例
チェック情報
| グループ: Code design |
| カテゴリ: 推奨 |
| AGC カテゴリ: 推奨 |
バージョン履歴
R2015b で導入
参考
MISRA C:2012 Rule 22.1 | MISRA C:2012 Rule 22.2 | MISRA C:2012 Rule 22.6 | MISRA C:2012 のチェック (-misra3)
1 All MISRA coding rules and directives are © Copyright The MISRA Consortium Limited 2021.
The MISRA coding standards referenced in the Polyspace Bug Finder documentation are from the following MISRA standards:
MISRA C:2004
MISRA C:2012
MISRA C:2023
MISRA C++:2008
MISRA C++:2023
MISRA and MISRA C are registered trademarks of The MISRA Consortium Limited 2021.
