MISRA C++:2008 Rule 5-0-12

Символ со знаком и символьный тип без знака должны только использоваться для устройства хранения данных и использования числовых значений

Описание

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

Символ со знаком и символьный тип без знака должны только использоваться для устройства хранения данных и использования числовых значений.

Объяснение

На C/C++ существует три типа char:

  • Плоскость char

  • signed char

  • unsigned char

Со знаком из плоскости char задан реализацией. Плоскость char не может взаимозаменяемо использоваться с другими типами. Например, вы можете принять char без знака и использование unsigned char сохранить символ. Ваша реализация может интерпретировать символы, как подписано. В такой ситуации ваш код может вести себя неожиданным способом, ведя к ошибкам, которые затрудняют, чтобы диагностировать.

MISRA C ++:2008 пределов использование этих трех типов char для различных приложений. signed и unsigned char тип подходит для числовых значений и устройства хранения данных. Плоскость char подходит для символьных данных. Избегайте использования signed или unsigned char когда вы намереваетесь использовать плоскость char.

Это правило также применяется к различному typedef из них char типы, такие как uint8_t и int8_t. Смотрите MISRA C++:2008 Rule 3-9-2.

Реализация Polyspace

Polyspace® повышает нарушение этого правила когда плоскость char неявно преобразован в любой signed char или unsigned char.

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

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

Примеры

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

typedef signed   char         int8_t;
typedef unsigned char         uint8_t;

namespace foo
{
	int8_t        ch_1   =   'a';     // Noncompliant
	uint8_t       ch_2  =   '\r';     // Noncompliant
	char          ch_3  =   'A';      // Compliant
	int8_t        num_1   =   10;     // Compliant
	uint8_t       num_2   =   12U;    // Compliant
	signed char   num_3   =   11;     // Compliant 

};

В этом примере Polyspace отмечает использование signed char и unsigned char хранить символьные данные. Символьные литералы имеют плоскость char типы и Polyspace отмечают неявное преобразование их плоскость char типы к явным образом signed или unsigned char типы.

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

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