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

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

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

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

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

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

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

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

Похожие темы