#define 中##是什么意思

//WeakObject 用法:WeakObj(self) 自动生成一个selfWeak
#define WeakObj(o) __weak typeof(o) o##Weak = o;

在项目中看到这样的宏定义,不明白是怎么回事,查了一些资料终于明白了。

标记粘贴运算符(##)

宏定义内的标记粘贴运算符(##)会合并两个参数。

字符串常量化运算符(#)

在宏定义中,当需要把一个宏的参数转换为字符串常量时,则使用字符串常量化运算符(#)。

将上面的宏定义展开,结果是:

__weak typeof(self) selfWeak = self;
//使用弱饮用,防止出现循环引用,造成内存泄漏。

下面的代码也使用了##,使用带参数的宏就能够快速的定义一个类,感觉很方便。

#define TestClass(req_name, field_name)         \
class CCY##req_name : public CCYTraderApi               \
{                                                   \
public:                                             \CCY##req_name(CCYTestCaseCfg::CCYTestCase* pCase);  \
protected:                                          \virtual bool Test(void);                    \virtual void UpdateParameter() {};                  \
private:                                            \vector m_Req;   \CCYTestCaseCfg::CCYTestCase* m_pCase;           \
};

参考:

菜鸟教程 C 预处理器


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部