C宏可变参数扩展
问题
写代码时,遇到需要定义一个字符串数组和一个函数指针数组,字符串数组的值和函数指针名称一一对应。按照一般初始化方式,需要重复输入很多内容,并且因为字符串数组和函数指针数组可能会有增减,因此一般方式就很繁琐,想着用宏定义是否可解决。
问题示例:
1 | //函数 |
宏参数数量
定义数组需要设置数组的长度,可以设置一个较大值,保证之后即便添加元素,也不会超出长度。但这显然不太优雅,对于空间有点浪费,作为嵌入式程序员,是不能容忍这种浪费行为的。因此在使用宏时,能确定传入的参数数量是最好的。
以下宏正可以解决此问题:
1 |
需要注意的是,该宏计算参数的数量是有上限的,如果预期参数数量超出,需要在宏中继续添加。虽然不是一劳永逸,但是目前最好的方法了。
参数扩展
如果仅仅只是传递参数数列,没有必要对参数进行扩展,如:
1 |
以上__VA_ARGS__
替换...
中的参数传递给printf
,不需要扩展。
但对我的问题来说就不够了,需要为传入的参数添加前缀。另外,传入参数不能是字符串,因为函数名称不是字符,宏办不到把字符串的引号去掉,因此传入的参数只能是a,b,c
,而不是"a","b","c"
。将参数转为字符串,加#
就可以了。
那么如何扩展呢,感谢文章最上方两个链接解答了这个问题。
1 |
以上宏实现了参数的扩展,具体使用方式:
1 | //字符串列表 |
参考文章
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 飞椅档案!
评论