递归宏的应用

在写一个项目的时候,遇到了这么一个场景:需要定义若干个字符串,想要给他们不一样的名字,但又想通过数组顺序处理。因此得出如下结构的代码:

 

string inputFileName, outputFileName, QueryName, KeywordsPath, keywordDir, statisticsName, statisticsBinName;

string* FilepathArr[] = { &inputFileName, &outputFileName, &QueryName, &statisticsName , &KeywordsPath, &statisticsBinName };

 

但是上述代码有几个小问题:

1.每当需要新增一个字符串时,就要修改两个地方;

2.插入新字符串名的时候假如不注意,就会令数组中字符串的顺序和预期的不一致。

 

为了解决这个问题,考虑使用宏定义来减少代码的复杂度。

 

在最后成功写出来之前查了很多资料也调试了很多次,总结起来有几个点:

1. 宏分为对象类宏和函数类宏两种,区分这两种宏在于宏后面是否紧跟一对括号

2. 宏展开可以迭代有限次,但不是无限次。因此可以通过展开足够的次数来满足使用要求;

3. 每次宏展开只会处理某个特定的宏,然后一遍一遍扫描直到没有宏能被处理。但宏不支持自递归或间接递归,强行递归会在一两次后终止递归,展开出来的代码中将包含未展开的宏本身,如:

#define F(x, b) x, F(x, b)
hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » 递归宏的应用