Почему все typedef над стандартными типами C?
если вы хотите использовать Qt, вы должны принять quint8,quint16 и так далее.
если вы хотите использовать GLib, вы должны добро пожаловать!guint8,guint16 и так далее.
On Linux здесь u32,s16 и так далее.
uC / OS определяет SINT32,UINT16 и так далее.
и если вам нужно использовать какую-то комбинацию этих вещей, вы лучше быть готовым к неприятностям. Потому что на вашей машине u32 будет typedefd over long и quint32 будет typedefd over int и компилятор буду жаловаться.
зачем все это делают, если есть <stdint.h>? Это какая-то традиция для библиотек?
4 ответа:
stdint.hне существовало тогда, когда эти библиотеки разрабатывались. Так что каждая библиотека сделала своюtypedefs.
для старых библиотек это необходимо, потому что заголовок в вопросе (
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.довольно много дальновидных, передовая совместимость, я думать.