このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
MISRA C:2012 Rule 22.10
The value of errno
shall only be tested when the last function to be called was an errno
-setting function
説明
ルール定義
The value of errno
shall only be tested when the last function to be called was an errno
-setting function. 1
This rule comes from MISRA C™:2012 Amendment 1.
根拠
errno
を設定する関数を除き、その他の関数はエラーで errno
を設定するように規格で定められていません。このような関数で errno
を設定するかどうかは、実装方法によって異なります。
エラーを検出するため errno
のみをチェックする場合、このチェックの妥当性も実装によって異なります。errno
の設定を必要としない実装で errno
のみをチェックすると、エラー状態を見逃す可能性があります。
errno
を設定する関数の一覧については、MISRA C:2012 Rule 22.8
を参照してください。
エラーの検出方法の詳細は、その特定の関数のドキュメンテーションを参照してください。
通常、そのような関数はエラーを示すために帯域外エラー インジケーターを返します。次に例を示します。
fopen
は、エラーが発生すると NULL ポインターを返します。signal
は、SIG_ERR
エラー インジケーターを返し、errno
に正の値を設定します。この関数の戻り値をチェックした後のみerrno
をチェックします。
Polyspace 実装
Polyspace® は、errno
をチェックしてもエラーがないことが保証されない状況で、errno
でエラー状態をチェックした場合に、このルールの違反を報告します。場合によっては、errno
をチェックすることによって誤検知につながる可能性があります。
たとえば、次の関数呼び出し後に errno
をチェックします。
fopen
: ISO® 規格に従う場合、この関数はエラーでerrno
を設定しない可能性があります。atof
: ISO 規格に従う場合、この関数はerrno
を設定しません。signal
: この関数がSIG_ERR
エラー インジケーターを返す場合のみ、errno
の値がエラーを示します。
Polyspace は、C 標準で errno
を設定する関数として指定されている関数に対してのみ、このルールの違反を報告します。
トラブルシューティング
ルール違反を想定していてもその違反が表示されない場合、コーディング規約違反が想定どおりに表示されない理由の診断を参照します。
例
チェック情報
グループ: Resources |
カテゴリ: 必要 |
AGC カテゴリ: 必要 |
バージョン履歴
R2017a で導入
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.