Мне интересно, разумно или целесообразно переопределять объявления заголовков для установки определенного типа.В предпочтении к чему-то вроде void *, который не добавляет безопасности типов.
Например, если у вас есть общая функция хранения, которая добавляет показание датчика в круговой буфер:
int add_reading(void *);
В порядкечтобы быть универсальным, функция должна быть определена как пустота *.Однако в заголовочном файле вы могли бы объявить функцию как:
int add_reading(my_reading_t *);
, что добавило бы степень безопасности типов по сравнению с указателем void.В универсальном заголовке вы можете установить тип с помощью #define, по умолчанию void.Таким образом, тип переопределения может быть определен непосредственно перед # include.
Это кажется ненужным хаком, но можно спорить то же самое и с непрозрачными указателями - используя opaque_type_t * вместо void *.Но это, по крайней мере, определенное поведение.Что мне интересно, если этот тип беспорядка вызывает UB (неопределенное поведение)?