このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
MISRA C:2012 Rule 10.4
Both operands of an operator in which the usual arithmetic conversions are performed shall have the same essential type category
説明
ルール定義
Both operands of an operator in which the usual arithmetic conversions are performed shall have the same essential type category 1 .
根拠
異なる型の間で暗黙的な変換を使用すると、値、符号、精度の損失の可能性を含め、意図しない結果を引き起こす場合があります。
実質的な型についての詳細は、MISRA C Rule 10.x の実質的な型を参照してください。
Polyspace 実装
チェッカーは、演算の 2 つのオペランドの実質的な型が異なる場合に、このルールの違反を報告します。チェッカー メッセージに、演算の 2 辺で検出された型が表示されます。
オペランドの 1 つが定数 0 である場合、チェッカーはこのルールに対する違反を報告しません。
演算で符号なし整数オペランドと符号付き整数定数オペランドが使用されている場合、符号付き定数の表現がそれと等価の符号なしの値と同じバイナリ表現であれば、Polyspace® は違反を報告しません。たとえば以下のコードでは、1
と 1U
のバイナリ表現が同じであるため、Polyspace は式 (var + 1)
の型は実質的な符合なし整数型であると仮定します。
unsigned int var;
int signed_var = (int) (var + 1);
トラブルシューティング
ルール違反を想定していてもその違反が表示されない場合、コーディング規約違反が想定どおりに表示されない理由の診断を参照します。
例
チェック情報
グループ: 実質的な型モデル |
カテゴリ: 必要 |
AGC カテゴリ: 推奨 |
バージョン履歴
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.