Беззнаковое целое постоянное переполнение

Постоянное значение выходит за пределы области значений типа данных беззнаковых целых чисел

Описание

Постоянное переполнение беззнакового целого происходит, когда вы присваиваете время компиляции, постоянное переменной беззнаковых целых чисел, тип данных которой не может разместить значение. n битное беззнаковое целое содержит значения в области значений [0, 2n-1].

Например, c является 8-битной переменной char без знака, которая не может содержать значение 256.

unsigned char c = 256;

Чтобы определить размеры фундаментальных типов, Средство поиска Ошибки использует вашу спецификацию для Target processor type (-target).

Риск

Стандарт C утверждает, что переполнение беззнакового целого должно быть перенесено (см., например, стандарт C11, разделите 6.2.5). Однако всеобъемлющее поведение может быть непреднамеренным и вызвать неожиданные результаты.

Фиксация

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

Примеры

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

#define MAX_UNSIGNED_CHAR 255
#define MAX_UNSIGNED_SHORT 65535

void main() {
    unsigned char c1 = MAX_UNSIGNED_CHAR + 1;
    unsigned short c2 = MAX_UNSIGNED_SHORT + 1;
}

В этом примере дефект появляется на макросах, потому что по крайней мере одно использование макроса вызывает переполнение.

Исправление — использует более широкий тип данных

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

#define MAX_UNSIGNED_CHAR 255
#define MAX_UNSIGNED_SHORT 65535

void main() {
    unsigned short c1 = MAX_UNSIGNED_CHAR + 1;
    unsigned int c2 = MAX_UNSIGNED_SHORT + 1;
}

Информация о результате

Группа: числовой
Язык: C | C++
Значение по умолчанию: 'off'
Синтаксис командной строки: UINT_CONSTANT_OVFL
Влияние: низко
ID CWE: 128, 189, 190, 191

Введенный в R2018b