gcc 4.4.1
我正在维护某人的代码而且我遇到了一些我不理解的东西。
#define RES_API(name, func) name##_##func
任何人都可以解释一下吗?
非常感谢,
答案 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)
。我个人认为这很愚蠢。