Разработчик с 20-летним стажем только недавно узнал о макросе UINT32_MAX — напоминание, что даже в Cи всегда есть чему удивляться
Инженер с 20-летним стажем в программировании на Си рассказал, как только недавно узнал о существовании макроса UINT32_MAX
.
Казалось бы, элементарная вещь — но даже опытные разработчики могут упустить полезные возможности языка, особенно если «учились Си» ещё во времена K&R и переходили к ANSI-C уже на лету.
В своём блоге он вспоминает, как на старых компьютерах int
был не 32-битным, как сегодня, а 16-битным. На Radio Shack CoCo int
вмещал значения до 65535, а на Commodore Amiga, возможно, уже был 32-битным. Именно из-за таких несостыковок переносимость кода между платформами становилась настоящим испытанием.
От самодельных типов к стандарту
Чтобы справиться с неопределенностью, разные разработчики создавали собственные типы: u_int32
, I16
, U32
и так далее. Позже появились стандартизированные stdint.h
и limits.h
, которые ввели чёткие типы (uint32_t
, int16_t
) и константы вроде INT_MAX
и UINT_MAX
.
В какую сторону развивается Vue и есть ли ему современные альтернативыtproger.ru
Наш герой знал про эти макросы и успешно использовал их. Но, как выяснилось, он упустил одну вещь: stdint.h
тоже содержит свои пределы — UINT32_MAX
, INT64_MIN
, INT8_MAX
и десятки других. Эти макросы позволяют писать ещё более надёжный и переносимый код, особенно когда важно жёстко фиксировать размер чисел.
Код, который всегда работает
До недавнего времени программист вручную писал значения вроде 4294967295
для uint32_t
— но теперь он просто использует UINT32_MAX
. Это не только читаемо, но и работает на любой платформе, где uint32_t
определён.
КОД
С signed-типами — аналогично: INT32_MAX
, INT16_MIN
и так далее. Стандарт Си делает всё это доступным уже давно — просто нужно об этом знать.
Урок: даже в Си есть чему удивляться
Автор оригинального материала признался: он просто не получил «меморандум» о появлении этих макросов в stdint.h
. А ведь они могли сэкономить ему часы — если не годы — возни с ручным вводом чисел и багами на разных архитектурах.
OpenAI представила модели o3 и o4-mini с новым уровнем рассужденийtproger.ru
Мораль проста: даже если ты 20 лет пишешь на Си — всегда найдётся что-то новое. И хорошо, когда язык даёт инструменты, которые делают код чище и безопаснее.
Знакомы с UINT32_MAX?КонечноНет, я как тот самый разработчик