MISRA C:2023 Rule 22.8
The value of errno shall be set to zero prior to a call to an errno-setting-function
R2024a 以降
説明
ルール定義
 The value of errno shall be set to zero prior to a call to an errno-setting-function.  1
        
This rule comes from MISRA C™:2012 Amendment 1.
根拠
errno を設定する関数は、errno を、エラー状態を示す非ゼロの値に設定します。
errno を設定する関数を呼び出す前に errno をゼロに設定していなかった場合、errno を設定する関数を以前に呼び出したときに設定された非ゼロの値が、errno に残っている可能性があります。この場合、errno を使用してエラーを確認すると、最新の呼び出しで発生したエラーであると誤って判断する可能性があります。
 errno はプログラム起動時に 0 に設定されますが、エラーの発生後に自動的にリセットされることはありません。必要に応じて、errno を明示的に 0 に設定しなければなりません。
 Errno を設定する関数は以下のとおりです。
- ftell、- fgetpos、- fgetwcおよび関連する関数。
- strtoimax、- strtolおよび関連する関数。- wcstoimaxや- wcstolなどのワイド文字の等価な関数も対象になります。
Polyspace 実装
最初に以下のいずれかの処理を行わずに、コードで errno を設定する関数を呼び出した場合、Polyspace® はこのルールに対する違反を報告します。
- errnoを 0 に設定する。
- 条件付きステートメントで - errnoを 0 と比較し、- errnoが 0 である分岐で関数を呼び出す。
Polyspace は、C 標準で errno を設定する関数として指定されている関数に対してのみ、このルールの違反を報告します。
トラブルシューティング
ルール違反を想定していてもその違反が表示されない場合、コーディング規約違反が想定どおりに表示されない理由の診断を参照します。
例
チェック情報
| グループ: Resources | 
| カテゴリ: 必要 | 
| AGC カテゴリ: 必要 | 
バージョン履歴
R2024a で導入
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.