C函数适配器

本文介绍了一种使用函数指针和宏定义实现函数适配器的方法,通过两个测试函数test1和test2展示了如何利用可变参数和宏定义灵活调用不同类型参数的函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

普通变量可以通过指针进行访问,用起来很方便,现在我有个想法,就是玩函数也要玩的这么炫,我想给它写个适配器……

这里我主要是用可变参数和函数指针来实现,有两个测试代码片段:test1()和test2()。其中test1用的是可变参数的函数指针,test2用的是宏实现的函数适配器。

代码如下:

 1 /*
2 File : adapter.c
3 Author : Mike
4 E-Mail : Mike_Zhang@live.com
5 */
6 #include <stdio.h>
7 #include <string.h>
8 #include <stdlib.h>
9 #include <stdarg.h>
10
11 #define adapter(f,...) f(__VA_ARGS__)
12 typedef int(*fun)(int a,...);
13
14 int fun1(int a,int b)
15 {
16 return a+b;
17 }
18
19 int fun2(int a,char *str)
20 {
21 return a+strlen(str);
22 }
23
24 int fun3(int a,char *str,long l)
25 {
26 return a+strlen(str)+l;
27 }
28
29 void test1()
30 {
31 int a = 10,b = 2;
32 fun p;
33
34 printf("test1\n");
35
36 p = (fun)fun1;
37 printf("%d\n",p(a,b));
38 p = (fun)fun2;
39 printf("%d\n",p(a,(char*)"just a test"));
40 p = (fun)fun3;
41 printf("%d\n",p(a,(char*)"just a test",1));
42 }
43
44 void test2()
45 {
46 int a = 10,b = 2;
47 fun p;
48
49 printf("test2\n");
50
51 p = (fun)fun1;
52 printf("%d\n",adapter(p,a,b));
53 p = (fun)fun2;
54 printf("%d\n",adapter(p,a,"just a test"));
55 p = (fun)fun3;
56 printf("%d\n",adapter(p,a,"just a test",1));
57 }
58
59 int main()
60 {
61 test1();
62 test2();
63 return 0;
64 }

tips : gcc和VS2010都行,VC6跑不过,用的时候注意点。

转载于:https://www.cnblogs.com/MikeZhang/archive/2012/01/17/2324896.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值