C宏包装

时间:2014-06-17 10:55:25

标签: c macros c-preprocessor

所以我在C库中遇到了以下用于RF通信的代码:

#define __COMB(a,b,c) (a##b##c)
#define _COMB(a,b,c) __COMB(a,b,c)

这主要用于为常量和函数创建各种名称。它只是连接参数。

我没有得到的是第二行。是否有理由包装宏? 如果它只是一个命名问题,为什么不写:

#define _COMB(a,b,c) (a##b##c)

可以找到该库here

提前致谢!

2 个答案:

答案 0 :(得分:5)

这是一个欺骗C预处理器在它们重新连接之前预先扩展参数的方法。在某些情况下需要这种解耦,例如,如果要在预处理器宏参数字符串化中使用__COMB

答案 1 :(得分:2)

双宏用于确保即使参数也是宏也能正常工作。

如果没有双宏,我们会得到XXYYZZ而不是xyz

#define XX x
#define YY y
#define ZZ z
_COMB(XX, YY, ZZ)