До недавнего времени я рассматривал решение большинства разработчиков / поставщиков систем оставить простой int
32-битным даже на 64-битных машинах. этакая целесообразная бородавка. С современными типами фиксированного размера C99 ( int32_t
и uint32_t
и т. Д.) Необходимость в стандартном целочисленном типе каждого размера 8, 16, 32 и 64 в основном отпадает. , и похоже, что int
можно было бы с таким же успехом сделать 64-битным.
Однако самое большое реальное следствие размера простого int
в C происходит из того факта, что В C по существу нет арифметики для типов меньше, чем int
. В частности, если int
больше 32-битного, результат любой арифметики для значений uint32_t
будет иметь тип signed int
, что довольно тревожно.
] Является ли это веской причиной постоянно фиксировать 32-битное значение int
в реальных реализациях? Я склоняюсь к тому, чтобы сказать да. Мне кажется, что может быть огромный класс использования uint32_t
, которые ломаются, когда int
больше 32 бит. Даже применение оператора унарного минуса или побитового дополнения становится опасным, если вы не вернетесь к uint32_t
.
Конечно, те же проблемы применимы к uint16_t
и uint8_t
на текущие реализации, но все, кажется, знают о них и привыкли рассматривать их как типы «меньше, чем int
».