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

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

Описание

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

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

Объяснение

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

Реализация Polyspace

Шашечные флаги объявляются именованными переменными, у которых тип целочисленного битового поля со знаком length равен единице.

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

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

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

Примеры

расширить все

#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;

В этом примере несоответствует только второе объявление битового поля. Именованная переменная объявляется со знаком length type one bit.

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

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