メインコンテンツ

MISRA C++:2008 Rule 9-6-3

Bit-fields shall not have enum type.

説明

ルール定義

Bit-fields shall not have enum type. 1

根拠

ビット フィールドを使用するには、その基となるビット表現が処理系定義ではないことが必要です。ISO/IEC 14882:2003 では、enum 型の基となるビット表現の符号属性が明確に定義されていません。enum 型の符号は実装に応じて異なるため、enum の値を表現するために必要な正確なビット数は処理系定義です。

実装によって動作が異なるコードと、診断が難しいバグの発生を回避するため、enum 型をビット フィールドとして使用しないでください。

Polyspace 実装

enum 型をビット フィールドとして使用すると、Polyspace® はこのルールの違反を報告します。

トラブルシューティング

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

すべて展開する

enum Spin {CW, CCW};
void foo(){
	struct DataStruct{
		Spin electron:2; //Noncompliant
	};
}

この例では、Polyspace はオブジェクト electron のビット フィールドとしての宣言にフラグを設定します。これは、electronenum 型であるためです。

チェック情報

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

バージョン履歴

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.