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