exponenta event banner

Рекомендации компилятора C по переполнению целочисленных символов со знаком

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

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

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

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

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

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

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

Связанные темы