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

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

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

В Linux есть u32, s16 и т.д.

uC/OS определяет SINT32, UINT16 и т.д.

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

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

Ответ 1

stdint.h не существовало, когда эти библиотеки разрабатывались. Поэтому каждая библиотека создала свой собственный typedef s.

Ответ 2

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

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

Ответ 3

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

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

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

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

Ответ 4

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

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

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