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

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

Описание

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

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

Объяснение

Переменные с типами битового поля целого числа со знаком длины, каждый может, имеют значения, которые не оправдывают надежды разработчика. Например, типы целого числа со знаком фиксированной ширины, такие как std16_t (от cstdint) имейте дополнительное представление two. В этом представлении один бит является только знаковым битом, и значение может быть 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