C函数适配器
普通变量可以通过指针进行访问,用起来很方便,现在我有个想法,就是玩函数也要玩的这么炫,我想给它写个适配器……
这里我主要是用可变参数和函数指针来实现,有两个测试代码片段: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跑不过,用的时候注意点。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)