我有这个功能:
void print_sum(int list[], int length) {
float sum = 0.0;
int i;
for (i = 0; i < length; i++) {
sum += (float) list[i];
}
printf("Sum: %0.2f\n", sum);
}
我希望,在同一个函数中,可以接收一个int
数组或一个float
数组。我怎么能成功呢?
答案 0 :(得分:3)
在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")
的浮点版本。