第一部分:基础知识
记住:#define的本质是替换
利器:使用"#"和"##"
#的作用把宏参数变为一个字符串
##的作用把连接其两边的字符形成一个新的参数
#define str(s) #s
#define cons(a,b) int(a##e##b)
int main()
{
printf(str(vck)); // 输出字符串"vck"
printf("%d/n", cons(2,3)); // 2e3 输出:2000
return 0;
}
第二部分:实例解析
cocos2d-x宏的应用:
#define CC_PROPERTY_PASS_BY_REF(varType, varName, funName)\
protected: varType varName;\
public: virtual const varType& get##funName(void);\
public: virtual void set##funName(const varType& var);
这是一个通过引用传值成员变量定义的快捷方式,这里面用到了##特殊符号,对于get##funName,前面的get是死的,后面的funName是活的,通过##能将此二者联系起来。
注意,如果中间去掉##符号的话,就不能形成一个活的函数名。
常用网络协议注册宏:
#define ADD_CMD(cmdType, varType)\
static varType _##varType;\
_ct_reg_cmd(cmdType, &_##varType);
这里定义了一个静态的_##varType,将其注册到协议查询表中,使用如下ADD_CMD(CMD_LOGIN,LoginCmd);
参数1是协议号,参数二是协议对应的类名,仅此一行代码,即可解决注册的所有工作,方便吧。