メインコンテンツ

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

MISRA C:2023 Dir 1.1

Any implementation-defined behavior on which the output of the program depends shall be documented and understood

R2024a 以降

説明

命令の定義

Any implementation-defined behavior on which the output of the program depends shall be documented and understood 1

根拠

C 標準によってコンパイラが構成要素に関する独自の仕様を選択することを許可されている場合、コードの構成要素は処理系定義の動作を持ちます。処理系定義の動作の完全なリストは、規格 ISO/IEC 9899:1999 (C99) の付録 J.3 および規格 ISO/IEC 9899:1990 (C90) の付録 G.3 にあります。

すべての処理系定義の動作を理解し、ドキュメント化している場合、プログラムのすべての出力は意図的であり、偶然生成されたものではないと確信できます。

Polyspace 実装

解析では、C99 に記載の次の処理系定義の動作とそれに対応する C90 に記載の動作の可能性を検出します。コンパイラ処理系の動作を把握している場合、解析結果を適切なコメントで正当化します。結果を正当化するには、次のステータスのいずれかを割り当てます。[正当化済み][アクションの予定なし]、または [欠陥ではない]

ヒント

同じ処理系定義の動作を示すすべての結果を一括で正当化するには、[結果のリスト] ペインの [詳細] 列を使用します。列ヘッダーをクリックして、同じエントリをもつすべての結果がグループ化されるようにします。Shift キーを押したままで、最初の結果を選択した後、最後の結果を選択します。結果の 1 つにステータスを割り当てます。[詳細] 列が表示されていない場合は、他の列ヘッダーを右クリックして、この列を有効にします。

C99 規格付録参照先ドキュメント化する動作Polyspace® によるサポート方法
J.3.2: 環境main 関数を定義できる別の方法。

解析では、次に示す以外の引数と戻り値の型を使用する main にフラグを設定します。

int main(void) { ... }
または
int main(int argc, char *argv[]) { ... }

C99 規格の節 5.1.2.2.1 を参照してください。

J.3.2: 環境関数 getenv で使用する、環境名のセットと環境リストを変更する方法。

解析では、関数 getenv の使用にフラグを設定します。この関数に関しては、環境変数のリストとそのリストの変更方法を知っておく必要があります。

C99 規格の節 7.20.4.5 を参照してください。

J.3.6: 浮動小数点FLT_ROUNDS の非標準値によって特徴付けられる丸め動作。

解析では、FLT_ROUNDS の値がセット {-1, 0, 1, 2, 3} に含まれない場合、float.h のインクルードにフラグを設定します。このセットに含まれる値を使用した場合のみ、適切に定義された丸め動作が行われます。

C99 規格の節 5.2.4.2.2 を参照してください。

J.3.6: 浮動小数点FLT_EVAL_METHOD の非標準負値によって特徴付けられる評価方法。

解析では、FLT_EVAL_METHOD の値がセット {-1, 0, 1, 2} に含まれない場合、float.h のインクルードにフラグを設定します。このセットに含まれる値を使用した場合のみ、適切に定義された浮動小数点演算の動作が行われます。

C99 規格の節 5.2.4.2.2 を参照してください。

J.3.6: 浮動小数点整数が元の値を正確に表現できない浮動小数点数に変換される場合の丸めの方向。

解析では、整数からサイズの小さい浮動小数点データ型への変換にフラグを設定します (例: 64 ビット int から 32 ビット float)。

C99 規格の節 6.3.1.4 を参照してください。

J.3.6: 浮動小数点浮動小数点数がより小さい浮動小数点数に変換される場合の丸めの方向。

解析では、以下の変換にフラグを設定します。

  • double から float

  • long double から double または float

C99 規格の節 6.3.1.5 を参照してください。

J.3.6: 浮動小数点FENV_ACCESS プラグマの既定の状態。

解析では、以下を除くプラグマの使用にフラグを設定します。

#pragma STDC FENV_ACCESS ON
または
#pragma STDC FENV_ACCESS OFF

C99 規格の節 7.6.1 を参照してください。

J.3.6: 浮動小数点 FP_CONTRACT プラグマの既定の状態。

解析では、以下を除くプラグマの使用にフラグを設定します。

#pragma STDC FP_CONTRACT ON
または
#pragma STDC FP_CONTRACT OFF

C99 規格の節 7.12.2 を参照してください。

J.3.11:プリプロセッサ命令認識される STDC ではない #pragma 命令それぞれに対する動作。

解析では、以下のプラグマの使用にフラグを設定します。

#pragma pp-tokens
ここでは、処理トークン STDCpragma の直後に続きません。次に例を示します。
#pragma FENV_ACCESS ON

C99 規格の節 6.10.6 を参照してください。

J.3.12: ライブラリ関数関数 feraiseexcept が "オーバーフロー" または "アンダーフロー" 浮動小数点例外に加えて "不正確結果" 浮動小数点例外を報告するかどうか。

解析では、関数 feraiseexcept の呼び出しにフラグを設定します。

C99 規格の節 7.6.2.3 を参照してください。

J.3.12: ライブラリ関数関数 setlocale に 2 番目の引数として渡される "C" および "" 以外の文字列。

解析では、関数 setlocale の 2 番目の引数が "C" または "" ではない場合に、呼び出しにフラグを設定します。

C99 規格の節 7.11.1.1 を参照してください。

J.3.12: ライブラリ関数FLT_EVAL_METHOD マクロの値が 0 より小さいか 2 より大きい場合に float_t および double_t に定義される型。

解析では、FLT_EVAL_METHOD の値がセット {0,1,2} に含まれない場合、math.h のインクルードにフラグを設定します。

C99 規格の節 7.12 を参照してください。

J.3.12: ライブラリ関数商を約分する際に関数 remquo で使用されるモジュラスの基底 2 の対数。

解析では、関数 remquoremquof、および remquol の呼び出しにフラグを設定します。

C99 規格の節 7.12.10.3 を参照してください。

J.3.12: ライブラリ関数関数 abortexit、または _Exit によってホスト環境に返される終了ステータス。

解析では、関数 abortexit、または _Exit の呼び出しにフラグを設定します。

C99 規格の節 7.20.4.1、7.20.4.3、または 7.20.4.4 を参照してください。

トラブルシューティング

ルール違反を想定していてもその違反が表示されない場合、コーディング規約違反が想定どおりに表示されない理由の診断を参照します。

チェック情報

グループ: The implementation
カテゴリ: 必要
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.