Почему все 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 102

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.

довольно много дальновидных, передовая совместимость, я думать.