Правый операнд оператора сдвига должен лечь в нуле области значений меньше, чем ширина в битах существенного типа левого операнда
Правый операнд оператора сдвига должен лечь в нуле области значений меньше, чем ширина в битах существенного типа левого операнда.
Рассмотрите этот оператор:
var = abc << num;
abc
16-битное целое число, затем num
должен быть в области значений 0–15, (неотрицательный и меньше чем 16). Если num
отрицательно или больше, чем 16, затем поведение сдвига не определено.Polyspace® повышает нарушение, когда правильный операнд оператора сдвига превышает область значений, заданную в этом правиле. Когда правильный операнд является переменной, нарушение повышено, если все возможное значение операнда не остается в области значений, заданной в этом правиле.
Когда директива препроцессору выполняет операцию сдвига на литерале номера, Polyspace принимает, что номер 64 бита шириной. Допустимая область значений сдвига для такого номера между 0 и 63. Например:
#if (1 << 64) //Noncompliant //... #endif
Если вы ожидаете нарушение правила, но не видите его, относитесь, чтобы Диагностировать, Почему Кодирующие Стандартные Нарушения Не Появляются как ожидалось.
Группа: Выражения |
Категория: необходимый |
Категория AGC: необходимый |