您的位置:首页 > 编程语言 > C语言/C++

C/C++语言中内容完全相同的多个函数,使用宏函数的写法

2015-01-17 20:30 501 查看
假设有这样一个需求:一个项目需要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个线程,每个线程访问相同的一个回调函数,并传递进入相同的参数,但是这个回调函数不能只写一个,应该是一个线程对应一个回调函数,就是这样一个问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: