[windows c]关于指针函数和参数可变函数同时应用情况的疑问

2017/03/10 更新

后来思考了一下,其实这基本就是C#里委托的一种用法。

才疏学浅,知道的太少才会出现下面这篇博文,我也不想删掉,放在这里作为自己的一个警示。

 ------------------------------------------------------------------------------------------------------------------------------------

昨天和今天在工作里写代码的时候,想把一段遍历的代码共用,但是苦于里面要做的处理过程和变量数目都有相当大的区别。

所以想用标题上的方法来解决这个问题,代码如下:

 1 #include <stdio.h>
 2 #include <stdarg.h>
 3 
 4 typedef int(*FunType)(int, int, ...);
 5 int test(FunType ft, int num, ...);
 6 int inner_fun_1(int a, int b);
 7 int inner_fun_2(int a, int b, int c);
 8 
 9 int main()
10 {
11     //这两个函数简单起见就做了个加法,可以完全不同的处理过程
12     test(inner_fun_1, 1, 2);
13     test(inner_fun_2, 1, 2, 3);
14 }
15 
16 int inner_fun_1(int a, int b)
17 {
18     return a + b;
19 }
20 
21 int inner_fun_2(int a, int b, int c)
22 {
23     return a + b + c;
24 }
25 
26 int test(FunType ft, int num, ...)
27 {
28     va_list argp;
29     int i;
30     int para;
31     int para_arr[2];
32 
33     va_start(argp, num);
34 
35     for (i = 0; i < 2; i++) {
36         para = va_arg(argp, int);
37         if (para == NULL) {
38             break;
39         }
40         para_arr[i] = para;
41         printf("additional arg[%d]: %d\n", i, para);
42     }
43     va_end(argp);
44 
45     if (i == 1) {
46         printf("res_1: %d\n", ft(num, para_arr[0]));
47     } else {
48         printf("res_2: %d\n", ft(num, para_arr[0], para_arr[1]));
49     }
50 }

上面是一个比较简单的例子。

做成这样不知道是我一开始思路有错,抑或有更加优秀的办法。

posted @ 2017-02-24 17:35  rarator  阅读(259)  评论(0编辑  收藏  举报