Я использую MPC56XX (встроенные системы) с компилятором, для которого int
и long
имеют ширину 32 бита.
В требуемом программном пакете у нас были следующие определения для типов шириной 32 бита:
typedef signed int sint32;
typedef unsigned int uint32;
В новом релизе это было изменено без особой документации на:
typedef signed long sint32;
typedef unsigned long uint32;
Я вижу, почему это было бы хорошо: у целых чисел есть ранг преобразования между short
и long
, так что теоретически дополнительные преобразования могут применяться при использовании первого набора определений.
Мой вопрос: Учитывая вышеуказанное изменение, навязанное нам авторами пакета, можно ли представить себе ситуацию, когда такое изменение изменит скомпилированный код, корректно приведя к другому результату?
Я знаком с "обычными унарными преобразованиями" и "обычными двоичными преобразованиями", но мне трудно придумать конкретную ситуацию, когда это действительно могло бы испортить мой существующий код. Но действительно ли это неважно?
В настоящее время я работаю в среде чистого C, используя C89/C94, но мне были бы интересны вопросы как C, так и C++.
EDIT: Я знаю, что смешивание int
с sint32
может дать разные результаты при переопределении. Но нам не разрешено использовать оригинальные типы C напрямую, только типизированные.
Я ищу пример (выражение или фрагмент), использующий константы, унарные/бинарные операторы, приведения и т.д. с другим, но правильным результатом компиляции на основе измененного определения типа.