Я использую 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++.
РЕДАКТИРОВАТЬ: я знаю, что смешивание int
с sint32
может привести к другим результатам, когда оно будет переопределено. Но нам не разрешено использовать исходные типы C напрямую, только те, которые определены с помощью typedef.
Я ищу образец (выражение или фрагмент), использующий константы, унарные/бинарные операторы, приведения типов и т. д. с другой, но правильный результат компиляции на основе измененного определения типа.
typeid
и т. д. Однако в отношении арифметических операций это то же самое, если только у вас действительно действительно очень извращенный внутренний компилятор. Ура и чт., - person Cheers and hth. - Alf   schedule 08.12.2011int
? когда используетсяsint32
? - person curiousguy   schedule 10.12.2011