01.05 Позитивные технологии
01.05 Позитивные технологии
01.05 Позитивные технологии

Разработчик 20 лет писал на Си и только сейчас узнал про макрос UINT32_MAX

Новости

Разработчик с 20-летним стажем только недавно узнал о макросе UINT32_MAX — напоминание, что даже в Cи всегда есть чему удивляться

367 открытий4К показов
Разработчик 20 лет писал на Си и только сейчас узнал про макрос UINT32_MAX

Инженер с 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.

Наш герой знал про эти макросы и успешно использовал их. Но, как выяснилось, он упустил одну вещь: stdint.h тоже содержит свои пределы — UINT32_MAX, INT64_MIN, INT8_MAX и десятки других. Эти макросы позволяют писать ещё более надёжный и переносимый код, особенно когда важно жёстко фиксировать размер чисел.

Код, который всегда работает

До недавнего времени программист вручную писал значения вроде 4294967295 для uint32_t — но теперь он просто использует UINT32_MAX. Это не только читаемо, но и работает на любой платформе, где uint32_t определён.

КОД

С signed-типами — аналогично: INT32_MAX, INT16_MIN и так далее. Стандарт Си делает всё это доступным уже давно — просто нужно об этом знать.

Урок: даже в Си есть чему удивляться

Автор оригинального материала признался: он просто не получил «меморандум» о появлении этих макросов в stdint.h. А ведь они могли сэкономить ему часы — если не годы — возни с ручным вводом чисел и багами на разных архитектурах.

Мораль проста: даже если ты 20 лет пишешь на Си — всегда найдётся что-то новое. И хорошо, когда язык даёт инструменты, которые делают код чище и безопаснее.

Знакомы с UINT32_MAX?
Конечно
Нет, я как тот самый разработчик
Следите за новыми постами
Следите за новыми постами по любимым темам
367 открытий4К показов