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

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

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

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

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

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

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

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

Похожие темы

Для просмотра документации необходимо авторизоваться на сайте