Если вы хотите использовать Qt, ты должен обнять quint8
, quint16
и так далее.
Если вы хотите использовать GLib, ты должен приветствовать guint8
, guint16
и так далее.
На Linux имеются u32
, s16
и так далее.
УНЦ / OS определяет SINT32
, UINT16
и так далее.
И если вам придется использовать какую-то комбинацию этих вещей, вам лучше быть готовым к неприятностям. Потому что на твоей машине u32
будет typedef
д long
а также quint32
будет typedef
д int
и компилятор будет жаловаться.
Почему все это делают, если есть <stdint.h>
? Это какая-то традиция для библиотек?
stdint.h
не существовало назад, когда эти библиотеки разрабатывались. Так что каждая библиотека сделала свое typedef
s.
Для более старых библиотек это необходимо, потому что рассматриваемый заголовок (stdint.h
) не существовало
Тем не менее, существует проблема: эти типы (uint64_t
и другие) дополнительная функция в стандарте. Таким образом, соответствующая реализация может не поставляться с ними — и, следовательно, вынудить библиотеки по-прежнему включать их в наши дни.
stdint.h
был стандартизирован с 1999 года. Более вероятно, что многие приложения определяют (фактически псевдоним) типы, чтобы поддерживать частичную независимость от базовой архитектуры машины.
Они дают разработчикам уверенность в том, что типы, используемые в их приложениях, соответствуют их специфическим предположениям о поведении, которые могут не соответствовать ни языковому стандарту, ни реализации компилятора.
Практика отражается в объектно-ориентированном Фасад шаблон проектирования и часто злоупотребляется разработчиками, неизменно пишу классы-оболочки для всех импортируемых библиотек.
Когда компиляторы были намного менее стандартными, а архитектуры машин могли отличаться от 16-битных, 18-битный через 36-битный мейнфреймы длины слова, это было гораздо больше внимания. Практика гораздо менее актуальна сейчас в мире, сходящемся на 32-битных ARM-системах. Это остается проблемой для микроконтроллеров низкого уровня с странный карты памяти.
Таким образом, у вас есть возможность набирать char для int.
Один «ужас кодирования» упомянул, что в заголовке одной компании был момент, когда программист хотел логическое значение, а char был логическим нативным типом для работы, и поэтому написал typedef bool char
, Позже кто-то нашел целое число, чтобы быть наиболее логичным выбором, и написал typedef bool int
, Результат, задолго до Unicode, был практически typedef char int
,
Я думаю, довольно много дальновидности, прямой совместимости.