#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 预处理器

你可能感兴趣的:(iOS)