Факторы компилятора C для переполнения целого числа со знаком

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

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

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

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

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

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

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

Похожие темы

Была ли эта тема полезной?