Почему все typedef над стандартными типами C?
если вы хотите использовать Qt, вы должны принять quint8
,quint16
и так далее.
если вы хотите использовать GLib, вы должны добро пожаловать!guint8
,guint16
и так далее.
On Linux здесь u32
,s16
и так далее.
uC / OS определяет SINT32
,UINT16
и так далее.
и если вам нужно использовать какую-то комбинацию этих вещей, вы лучше быть готовым к неприятностям. Потому что на вашей машине u32
будет typedef
d over long
и quint32
будет typedef
d over int
и компилятор буду жаловаться.
зачем все это делают, если есть <stdint.h>
? Это какая-то традиция для библиотек?
4 ответа:
stdint.h
не существовало тогда, когда эти библиотеки разрабатывались. Так что каждая библиотека сделала своюtypedef
s.
для старых библиотек это необходимо, потому что заголовок в вопросе (
stdint.h
) не существует.есть еще, однако, проблема вокруг: эти типы (
uint64_t
и др.)дополнительная функция в стандарте. Таким образом, соответствующая реализация может не поставляться с ними-и, таким образом, заставить библиотеки по-прежнему включать их в настоящее время.
stdint.h
была стандартизирована с 1999 года. Более вероятно, что многие приложения определяют (фактически псевдонимы) типы для поддержания частичной независимости от базовой архитектуры компьютера.они обеспечивают разработчикам уверенность в том, что типы, используемые в их приложении, соответствуют их проектным предположениям о поведении, которые могут не соответствовать ни стандарту языка, ни реализации компилятора.
практика отражается в объектно-ориентированной фасад шаблон дизайна и сильно злоупотребляет разработчиками, неизменно пишущими классы-оболочки для всех импортированных библиотек.
когда нарушителей было значительно меньше стандартных и аппаратов может варьироваться от 16-разрядных, 18-бит через 36-бит длина слова мэйнфреймов это было гораздо больше внимания. Практика гораздо менее актуальна в настоящее время в мире, сходящемся на 32-битных встроенных системах ARM. Это по-прежнему вызывает озабоченность у лоукостеров микроконтроллеры с странно карты памяти.
таким образом, у вас есть возможность typedef char для int.
один "кодирующий ужас" упомянул, что один заголовок компании имел точку, где программист хотел логическое значение, а символ был логическим собственным типом для задания, и поэтому написал
typedef bool char
. Затем позже кто-то нашел целое число, чтобы быть наиболее логичным выбором, и написалtypedef bool int
. Результат, задолго до Unicode, был практическиtypedef char int
.довольно много дальновидных, передовая совместимость, я думать.