Для начала следует сказать, что создать функцию, которая принимала бы как параметр тип данных в си невозможно. Однако можно создать макрос, который работал бы похожим образом. Изначально передо мной стояла задача вывести диапазоны типов данных (вообще для этого есть специальная библиотека). Но мне было интересно реализовать это самостоятельно. Конечно, можно было бы просто прописать это вручную, но я решил посмотреть, получится ли сократить этот код (не получилось). Итак, для начала создадим структуру с одним полем, что положить туда размер типа данных: struct type_property { short size; }; После этого создадим массив структур type_property в котором для каждого элемента будет вызываться макрос, который, в свою очередь, будет брать как параметр тип данных и возвращать его размер: struct type_property properties[] = { TYPE_PROPERTY_INIT(int), TYPE_PROPERTY_INIT(float), TYPE_PROPERTY_INIT(double), TYPE_PROPERTY_INIT(char), TYPE_PROPERTY_INIT(long long), TYPE_P