Компилятор C Факторов для подписанных Целочисленного переполнения

Генератор кода уменьшает использование памяти и увеличивает эффективность кода, который он производит, принимая, что подписанные целочисленные операции C переносятся при переполнении. Целочисленное переполнение со знаком происходит, когда результат арифметической операции находится вне области значений, которые может представлять тип выхода данных. Язык программирования на C не определяет результаты таких операций. Некоторые компиляторы C агрессивно оптимизируют подписанные операции для значений в диапазоне за счет условий переполнения. Другие компиляторы сохраняют полное поведение при переполнении. Для примера компиляторы gcc и MinGW обеспечивают опцию для надежного переноса переполнения на подписанные целочисленное переполнение.

Когда вы генерируете код, если вы используете поддерживаемый компилятор с опциями по умолчанию, настроенными генератором кода, компилятор сохраняет полное поведение wrap-on-overflow. Если вы измените опции компилятора или скомпилируете код в другой среде разработки, не исключено, что компилятор не сохраняет полное поведение wrap-on-overflow. В этом случае исполняемая программа может выдать непредсказуемые результаты.

Если эта проблема является проблемой для вашего заявления, рассмотрите одно или несколько из следующих действий:

  • Проверьте, что скомпилированный код дает ожидаемые результаты.

  • Если у вашего компилятора есть опция принудительного переноса, включите его. Например, для компилятора gcc или компилятора на основе gcc, такого как MinGW, сконфигурируйте процесс сборки, чтобы использовать опцию компилятора -fwrapv.

  • Выберите компилятор, который переносится при целочисленном переполнении.

  • Если у вас установлен Embedded Coder, разрабатывайте и применяйте пользовательскую библиотеку замещения кода для замены кода, сгенерированного для подписанных целых чисел. Для получения дополнительной информации см. раздел Индивидуальную настройку замещения кода (Embedded Coder).

Похожие темы