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

Битовые поля должны быть или типом bool или явным образом целочисленным типом со знаком или без знака

Описание

Управляйте определением

Битовые поля должны быть или типом bool или явным образом целочисленным типом со знаком или без знака.

Объяснение

Используя битовые поля требуют, чтобы их базовые битные представления не были заданы реализацией. Для типов кроме bool и signed или unsigned целочисленные типы, базовое битное представление не явным образом известно. Например, базовое представление int битовое поле может быть или подписано или без знака на основе реализации. Точно так же ISO/IEC 14882:2003 явным образом не задает со знаком из базового битного представления wchar_t типы.

Используя типы кроме bool и signed или unsigned целочисленные типы как битовые поля могут привести к коду, который ведет себя зависящим от реализации способом и результатом в ошибках, которые затрудняют, чтобы диагностировать. При использовании битовых полей используйте bool, signed целочисленные типы или unsigned целочисленные типы.

Реализация Polyspace

Polyspace® сообщает нарушение этого правила, если тип небольшого поля:

  • Целочисленный тип, который не имеет явной спецификации знака

  • wchar_t

Polyspace не сообщает о нарушении, если тип небольшого поля:

  • bool

  • Явным образом или явным образом целочисленный тип без знака со знаком

  • Явным образом char без знака или со знаком

Поиск и устранение проблем

Если вы ожидаете нарушение правила, но не видите его, относитесь, чтобы Диагностировать, Почему Кодирующие Стандартные Нарушения Не Появляются как ожидалось.

Примеры

развернуть все

#include <cstdint>
struct S
{
	signed int sInt_f : 2; // Compliant
	unsigned int uInt_f : 2; // Compliant
	char Ch_f : 2; // Noncompliant
	signed char sCh_f : 2; // Compliant
	unsigned char uCh_f : 2; // Compliant
	short Sh_f : 2; // Noncompliant
	signed short sSh_f : 2; // Compliant
	unsigned short uSh_f : 2; // Compliant
	int Int_f : 2; // Noncompliant
	bool Bool_f : 2; // Compliant
	wchar_t wch_f : 2; // Noncompliant
	int32_t sInt32_f : 2; // Noncompliant
	int8_t sInt8_f : 2; // Compliant
	long Long_f:2; //Noncompliant
	unsigned long uLong_f:2; //Compliant
};

В этом примере Polyspace отмечает битовые поля целочисленного типа, которые явным образом не подписываются или не без знака и wchar_t введите битовые поля.

Проверяйте информацию

Группа: Классы
Категория: необходимый
Введенный в R2013b