Целое выражение не должно приводить к потере данных
Целое выражение не должно приводить к потере данных.
Потеря данных может произойти, если вы выполняете явный бросок или если ваше целое выражение приводит к неявному преобразованию, переполнению, потере значимости или переносу. Например:
Неявное преобразование из uint16_t
к uint8_t
отбрасывает высокий байт большего типа данных.
Арифметическое выражение с целыми числами со знаком, которое приводит к переполнению, является неопределенным поведением.
Чтобы убедиться, что никакая неожиданная потеря данных не происходит:
Избегайте преобразований целочисленного типа путем выполнения всех операций в универсальном типе.
Используйте соответствующую защиту (ту, которая утверждает и операторы if) обрабатывать другие возможные причины потери данных.
Polyspace® флаги эти интегральные выражения, которые могут привести к потере данных:
Операция на со знаком или беззнаковом целом переменные, который приводит к переполнению.
Присвоение времени компиляции, постоянного к целому числу со знаком или переменным беззнаковых целых чисел, тип данных которых не может вместить значение той константы.
Преобразование целого числа (без знака) со знаком к более узкому целочисленному типу (без знака) со знаком.
Преобразование беззнакового целого к целому числу со знаком.
Операция сдвига, которая приводит к значению, которое не может быть представлено типом данных результата.
Polyspace не отмечает использование static_cast
бросать к более узкому типу. Программное обеспечение принимает, что они, преобразование является намеренным, даже если они могут привести к потере данных.
Если вы ожидаете нарушение правила, но не видите его, относитесь, чтобы Диагностировать, Почему Кодирующие Стандартные Нарушения Не Появляются как ожидалось.
Группа: Стандартные преобразования |
Категория: необходимый, автоматизированный |
Polyspace Bug Finder™ делает определенные предположения о значениях входных параметров. Смотрите Аналитические Предположения Bug Finder.
За счет возможно более длинного времени выполнения можно выполнить более исчерпывающий анализ, где все значения входных параметров функции рассматриваются при показе дефектов, включая входные параметры невостребованных функций. Смотрите Run stricter checks considering all values of system inputs (-checks-using-system-input-values)
.
Check AUTOSAR C++ 14 (-autosar-cpp14)
| Run stricter checks considering all values of system inputs (-checks-using-system-input-values)