Почему все печатают на стандартных C-типах?

Если вы хотите использовать Qt, ты должен обнять quint8, quint16 и так далее.

Если вы хотите использовать GLib, ты должен приветствовать guint8, guint16 и так далее.

На Linux имеются u32, s16 и так далее.

УНЦ / OS определяет SINT32, UINT16 и так далее.

И если вам придется использовать какую-то комбинацию этих вещей, вам лучше быть готовым к неприятностям. Потому что на твоей машине u32 будет typedefд long а также quint32 будет typedefд int и компилятор будет жаловаться.

Почему все это делают, если есть <stdint.h>? Это какая-то традиция для библиотек?

102

Решение

stdint.h не существовало назад, когда эти библиотеки разрабатывались. Так что каждая библиотека сделала свое typedefs.

78

Другие решения

Для более старых библиотек это необходимо, потому что рассматриваемый заголовок (stdint.h) не существовало

Тем не менее, существует проблема: эти типы (uint64_t и другие) дополнительная функция в стандарте. Таким образом, соответствующая реализация может не поставляться с ними — и, следовательно, вынудить библиотеки по-прежнему включать их в наши дни.

40

stdint.h был стандартизирован с 1999 года. Более вероятно, что многие приложения определяют (фактически псевдоним) типы, чтобы поддерживать частичную независимость от базовой архитектуры машины.

Они дают разработчикам уверенность в том, что типы, используемые в их приложениях, соответствуют их специфическим предположениям о поведении, которые могут не соответствовать ни языковому стандарту, ни реализации компилятора.

Практика отражается в объектно-ориентированном Фасад шаблон проектирования и часто злоупотребляется разработчиками, неизменно пишу классы-оболочки для всех импортируемых библиотек.

Когда компиляторы были намного менее стандартными, а архитектуры машин могли отличаться от 16-битных, 18-битный через 36-битный мейнфреймы длины слова, это было гораздо больше внимания. Практика гораздо менее актуальна сейчас в мире, сходящемся на 32-битных ARM-системах. Это остается проблемой для микроконтроллеров низкого уровня с странный карты памяти.

13

Таким образом, у вас есть возможность набирать char для int.

Один «ужас кодирования» упомянул, что в заголовке одной компании был момент, когда программист хотел логическое значение, а char был логическим нативным типом для работы, и поэтому написал typedef bool char, Позже кто-то нашел целое число, чтобы быть наиболее логичным выбором, и написал typedef bool int, Результат, задолго до Unicode, был практически typedef char int,

Я думаю, довольно много дальновидности, прямой совместимости.

3
По вопросам рекламы [email protected]