メインコンテンツ

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

MISRA C++:2008 Rule 5-0-20

Non-constant operands to a binary bitwise operator shall have the same underlying type.

説明

ルール定義

Non-constant operands to a binary bitwise operator shall have the same underlying type. 1

根拠

二項ビット演算で、使用しているオペランドの潜在型がそれぞれ異なる場合、演算を設計する際にどの型を想定したのかが明確ではありません。たとえば、このコードでは次のようになります。

uint8_t mask = ~(0x10);
uint16_t value;
value ^= mask; // Non-compliant
8 ビットの mask または 16 ビットの mask のどちらを設計しているのかが明確ではありません。このような混乱を避けるために、二項ビット演算子の非定数オペランドには、潜在型が同じオペランドを使用してください。

Polyspace 実装

二項ビット演算子の非定数オペランドの潜在型がそれぞれ異なる場合、Polyspace® はこのルールに対する違反を報告します。

トラブルシューティング

ルール違反が想定されるものの、Polyspace から報告されない場合は、コーディング規約違反が想定どおりに表示されない理由の診断を参照してください。

すべて展開する

#include<cstdint>

void foo()
{
    uint8_t a, b;
    uint16_t c;
    //...
    uint8_t d = a ^ b; //Compliant
    uint16_t e = a ^ c; //Noncompliant

}

この例では、ac の基となるデータ型が一致しないため、Polyspace はビット演算 a^c にフラグを設定します。

チェック情報

グループ: Expressions
カテゴリ: 必要

バージョン履歴

R2013b で導入


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.