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