特殊符号##

        “##”是一种分隔连接方式,它的作用是先分隔,然后进行强制连接。

例如:
#define TYPE(num) t_num_t
        上面的程序程序当调用 TYPE(3)时,本身想宏替换为 t_3_t,但是实际还是会是 t_num_t,因为 t_num_t
是一个整体,那么这个时候可以改用这样一种方式:
#define TYPE(num) t_##num##_t
这样的话程序在处理的时候就会看成是三个部分 t_,num,_t,就能正确替换为 t_3_t.

宏定义的{…}写法和 do{…}while(0)写法

第一种情况:当我们定义一个宏定义时  例如:
#define TYPE(num)
如果我们空定义的话,那么当我们来引用它时就会报警告,于是我们可以选择这样:
#define TYPE(num) do{}while(0)
这样就能避免警告

第二种情况:当我们定义一个宏如下:
#define TYPE()\ {fun1(); fun2();}
当我们这样去引用它时:
if(...) TYPE(); else //error parse error before else fun();
会出现错误,因为替换后会多出一个分号,为了避免这样的宏定义错误,建议定义复杂 的宏时使用 do{}while(0)的方式:
#define TYPE()\ do {fun1(); fun2();}while(0)

 

技术
下载桌面版
GitHub
Gitee
SourceForge
百度网盘(提取码:draw)
云服务器优惠
华为云优惠券
腾讯云优惠券
阿里云优惠券
Vultr优惠券
站点信息
问题反馈
邮箱:[email protected]
吐槽一下
QQ群:766591547
关注微信