exponenta event banner

MISRA C++: 2008 Правило 9-6-4

Именованные битовые поля со знаком целочисленного типа должны иметь длину более одного бита

Описание

Определение правила

Именованные битовые поля со знаком целочисленного типа должны иметь длину более одного бита.

Объяснение

Переменные со знаком целочисленные типы битовых полей длиной один могут иметь значения, которые не соответствуют ожиданиям разработчика. Например, подписанные целочисленные типы фиксированной ширины, такие как std16_t (от cstdint) имеют двойное представление дополнения. В этом представлении один бит является просто знаком, и значение может быть 0 или -1.

Внедрение Polyspace

Средство проверки помечает объявления именованных переменных, имеющих подписанные целочисленные битовые типы полей длиной, равной единице.

Типы битовых полей нулевой длины не отмечаются.

Поиск неисправностей

Если вы ожидаете нарушения правила, но не видите его, обратитесь к разделу Нарушения стандартов кодирования не отображаются.

Примеры

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

#include <cstdint>

typedef struct
{
   std::uint16_t IOFlag :1;    //Compliant - unsigned type
   std::int16_t InterruptFlag :1; //Noncompliant
   std::int16_t Register1Flag :2; //Compliant - Length more than one bit
   std::int16_t : 1; //Compliant - Unnamed
   std::int16_t : 0; //Compliant - Unnamed
   std::uint16_t SetupFlag :1; //Compliant - unsigned type
} InterruptConfigbits_t;

В этом примере только второе объявление битового поля является несоответствующим. Именованная переменная объявляется со знаком длиной один бит.

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

Группа: Классы
Категория: Обязательно
Представлен в R2013b