exponenta event banner

Правило AUTOSAR C++ 14 M9-6-4

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

Описание

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

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

Объяснение

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

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

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

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