Сегодня я наткнулся на интересный момент в обзоре Code Review . В этом ответе @Veedrac рекомендовал заменить типы переменного размера (например, int
и long
) на типы фиксированного размера, такие как uint64_t
и uint32_t
. Цитата из комментариев этого ответа:
Размеры int и long (и, следовательно, значения, которые они могут содержать) зависят от платформы. С другой стороны, int32_t всегда имеет длину 32 бита. Использование int просто означает, что ваш код работает по-разному на разных платформах, что, как правило, не то, что вы хотите.
Причины, по которым стандарт не устанавливает общие типы, частично объясняются здесь @supercat. C был написан для переносимости между архитектурами, в отличие от сборки, которая обычно использовалась для системного программирования в то время.
Я думаю, изначально задумывалось, что каждый тип, кроме int, будет наименьшей вещью, которая может обрабатывать числа разных размеров, и что int будет наиболее практичным размером "общего назначения", который может обрабатывать +/- 32767.
Что касается меня, я всегда использовал int
и не очень беспокоюсь об альтернативах. Я всегда думал, что это самый шедевр с лучшими характеристиками, конец истории. Единственное место, где я думал, что фиксированная ширина будет полезна, - это кодирование данных для хранения или передачи по сети. Я редко видел типы фиксированной ширины в коде, написанном другими.
Я застрял в 70-х годах или на самом деле есть смысл использовать int
в эпоху C99 и далее?