Написал реализацию списков в Си для одного проекта. изначально мне понадобился функционал списков в более, чем двух местах, но с разными данными.
Реализацию написал такого вида:
typedef struct ListSingly
{
int64_t * data;
struct ListSingly * next;
} ListSingly;
(int64_t * вместо void * из-за того, что void имеет нефиксированный размер)
Вопрос - для generic списка (т.е. когда я в одном месте буду приводить data к float, а в другом к SomeStruct *) такая реализация нормальна? Просто я очень не хочу городить нечитаемый огород из макросов для реализации под каждый конкретный тип.
Как тогда разруливать предупреждения компилятора о том, что типы разного размера, когда, например, я буду использовать signed char для data? Ведь злоупотребление & 0xFF может привести к потере бита знака или его неправильной интерпретации.