C语言宏的妙用

本文深入探讨了C语言预处理宏的基本概念与高级应用,包括宏定义、字符串化及拼接操作符的功能,并通过实际案例展示了宏在游戏引擎cocos2d-x及网络协议注册中的运用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一部分:基础知识

记住:#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是协议号,参数二是协议对应的类名,仅此一行代码,即可解决注册的所有工作,方便吧。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值