函数参数中的广义类型数组

时间:2016-01-31 06:05:51

标签: c casting

我有这个功能:

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数组。我怎么能成功呢?

1 个答案:

答案 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")的浮点版本。