#define声明解释道

时间:2009-12-14 07:25:49

标签: c

gcc 4.4.1

我正在维护某人的代码而且我遇到了一些我不理解的东西。

#define RES_API(name, func) name##_##func

任何人都可以解释一下吗?

非常感谢,

4 个答案:

答案 0 :(得分:6)

##是一个连接运算符。在代码中使用RES_API(name1, func1)将替换为name1_func1。更多信息here

答案 1 :(得分:4)

##运算符连接两个标记。在您的情况下,name会附加一个下划线,并附加func

因此RES_API(aName, aFunc)会产生aName_aFunc

它本身似乎很烦人。我可以看到在混合使用C和C ++代码时的用法,因为C库倾向于为它们的函数添加前缀,而C ++库会将它们放在命名空间中。

给出替代定义,例如:

#define RES_API(name, func) name##::##func

您突然有一种在C接口或C ++之间切换的通用方法。

答案 2 :(得分:4)

我知道你已经得到了答案,但有一些关于C-FAQ的详细信息解释了C Preprocessor magic的分配。

答案 3 :(得分:1)

使用此宏,您可以执行OBJ_DoSomething,而无需执行RES_API(OBJ, DoSomething)。我个人认为这很愚蠢。