В C++ это можно сделать с помощью шаблона. Но в C вы можете сделать что-то подобное с помощью макросов. Один из способов заключается в замене функции с помощью макроса:
#define PRINT_SUM(list,type,format,length) do{ \
type sum = 0; \
int i; \
for (i = 0; i < length; i++) { \
sum += (type) list[i]; \
} \
printf("Sum: " format "\n", sum); \
}while(0)
Чтобы использовать эту функцию, написать что-то вроде PRINT_SUM(a,float,"%0.2f",3);
.
Другой способ определить макрос, который определяет функцию, которая получает список данного типа:
#define DEFINE_PRINT_SUM(name,type,format) void name(type list[], int length) { \
type sum = 0.0; \
int i; \
for (i = 0; i < length; i++) { \
sum += (type) list[i]; \
} \
printf("Sum: "format"\n", sum); \
}
Затем вы можете определить версию поплавка print_sum
с DEFINE_PRINT_SUM(print_sum_float,float,"%0.2f")
.
Возможно, вы можете сделать это, используя всевозможные допущения, но не делайте этого. Определите две функции: одну для 'int' и one для 'float' (или 'double's). –