このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
MISRA C:2023 Rule 10.3
The value of an expression shall not be assigned to an object with a narrower essential type or of a different essential type category
R2024a 以降
説明
ルール定義
The value of an expression shall not be assigned to an object with a narrower essential type or of a different essential type category 1 .
根拠
異なる型の間で暗黙的な変換を使用すると、値、符号、精度の損失の可能性を含め、意図しない結果を引き起こす場合があります。
実質的な型についての詳細は、MISRA C Rule 10.x の実質的な型を参照してください。
Polyspace 実装
式の値が次のいずれかのデータ型の変数に代入される場合、ルール チェッカーが違反を報告します。
より範囲が狭い実質的な型の変数。たとえば、
unsigned int
(32 ビット) からunsigned short
(16 ビット) への代入。異なる実質的な型カテゴリの変数。たとえば、
_Bool
(実質的な boolean 型) からunsigned int
(実質的な符号なし型) への代入。実質的な型カテゴリについての詳細は、
MISRA C:2012 Rule 10.1
を参照してください。
以下の場合、ルール チェッカーはこのルールの違反を報告しません。
オブジェクトがその実質的な型に対応する定数 0 に代入される場合。許容される 0 値は、整数型の場合は
0
、double
の場合は0.0
、char
の場合は'\0'
です。次のように、配列などの集約型の変数が省略表記
{0}
を使用して初期化される場合。float dat2[3*3] = {0};
マクロ
TRUE
/true
およびFALSE
/false
が、対応するブール値とともにbool
変数に代入される場合。これらのマクロのスペルに大文字小文字が混在する場合、Polyspace® は違反を報告します。符号付き定数が符号なし変数に割り当てられている一方、符号付き定数がそれと等価の符号なしの値と同じ表現である場合。たとえば、チェッカーは次のようなステートメントにはフラグを設定しません。
unsigned int u = 1;
複素オブジェクトに対応する実数型のサイズで実数の式を格納できるときに、実質的な実数の浮動小数点型の式が、実質的な複素数の浮動小数点型のオブジェクトに代入される場合。以下に例を示します。
複素オブジェクトfloat32_t f32a; _Complex float32_t cf32a; cf32a = f32a;
cf32a
に対応する実数型がfloat32_t
であり、これはf32a
を格納できます。この代入は、例外としてこのルールに準拠します。
コード生成ツールがブール値 true/false
と整数リテラル 1/0
を相互互換的に使用する可能性がある場合、このルールの違反となります。このルールは、AGC
モードで使用する場合は推奨であるため、このような欠陥を正当化することもできます。コードへの注釈付けと既知の結果または許容可能な結果の非表示を参照してください。
トラブルシューティング
ルール違反を想定していてもその違反が表示されない場合、コーディング規約違反が想定どおりに表示されない理由の診断を参照します。
例
チェック情報
グループ: 実質的な型モデル |
カテゴリ: 必要 |
AGC カテゴリ: 推奨 |
バージョン履歴
R2024a で導入参考
MISRA C:2023 のチェック (-misra-c-2023)
| MISRA C:2023 Rule 10.4
| MISRA C:2023 Rule 10.5
| MISRA C:2023 Rule 10.6
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.