C/C++语言中内容完全相同的多个函数,使用宏函数的写法
扫描二维码
随时随地手机看文章
假设有这样一个需求:一个项目需要250个函数,但这些函数体内容完全相同,仅函数名不同,例如Func0、Func1、Func2...等等,这样的要求怎么实现呢?(先不要问有没有如此变态的需求)
当然可以使用手工先写Func0函数体,再写Func1函数体,....,一直写到函数体Func250。假设写完了后,项目需求有变,函数体内有变化,还要从头开始一个一个改.....!!!
如何使用宏函数实现这个需求?(先写3个吧)
//这里是宏函数定义 // 这种函数定义基本覆盖了所有的函数类型, // 有参数,有返回值 #define FUNC(n) int Func##n(int a, int b) { return a+b; } //这里开始“实现”每一个函数体 // 将产生函数名为Func0、Func1、Func2的函数体 FUNC(0) FUNC(1) FUNC(2) //FUNC(3) //FUNC(n) //自己往下接着写吧..... //再加深一步,使用函数指针数组引用这些函数 // 因为已经定义了几个函数名,反正使用时一定是函数指针数组访问 int (*fnFunc[2])(int, int) = { Func0, Func1, Func2, // Func3, } //主函数 void main() { //① 访问方式1 int x = Func0(24, 15); //② 访问方式2 for (int i=0; i<3; i++) { int y = fnFunc[i](12, 88); } }
使用VC编译该程序,成功编译后,可以查看宏展开文件。方法是:在【项目】--【设置】--【C++】底下的选项中添加“/P”(大写),编译时可以得到一个.i的宏展开文件:
int Func0(int a, int b){ return a+b;} int Func1(int a, int b){ return a+b;} int Func2(int a, int b){ return a+b;} int (*fnFunc[2])(int, int) = { Func0, Func1, Func2, } void main() { int x = Func0(24, 15); for (int i=0; i<3; i++) { int y = fnFunc[i](12, 88); } }
这样的使用需求会碰到的:一个项目创建了N个线程,每个线程访问相同的一个回调函数,并传递进入相同的参数,但是这个回调函数不能只写一个,应该是一个线程对应一个回调函数,就是这样一个问题。