C/C++宏定义

看了一下驱动结构,结构基本没怎么变,但发现多了相当多的宏定义,如果你是高手就绕道行吧,这里在温习一下宏定义相关的东西 :-(

一. 初级用法

#define to_string(a)                                    #a// 把参数a转换成字符串
#define to_char(a)                                      #@a// 把参数a转换成字符
#define to_connect(a, b)                                a ## b// 把参数a和参数b组合相连


使用(注释是运行结果):
char *s1 = to_string(abc);// "abc"
char *s2 = to_connect("a", "b");// "ab"
int i1 = to_connect(1, 2);// 12
char i2 = to_char(a);// 'a'
int i3 = to_char(3);// 51


二. 高级的用法
使用场景:假如我们有很多种动物(猫,狗,鸡等等),都需想用一个结构体来定义,再假如结构体都只想描述动物的重量和身高,但又不想所有动物的结构体名称一致。

实际应用中C++会使用类,这里只是假设哈。

假如结构体都想用Animal_打头,如Animl_Cat,同样我们用宏定义来实现:

#define StructureType(type)                             struct Animal_ ## type { \
                                                            float weight; \
                                                            float height; \
                                                        };


使用:
StructureType(Cat);// 定义一个Animl_Cat结构体
struct Animal_Cat cat;// 实例化一个Animl_Cat
cat.weight = 10;
cat.weight = 30;

你可能在想,我想定义一个新的动物结构体,增加一个动物属性,那就结合上面的组合方式

#define StructureTypeEx(type, member)                   struct Animal_ ## type { \
                                                            float weight; \
                                                            float height; \
                                                            char* ## member; \
                                                        };

使用:
StructureTypeEx(Dog, Name);// 定义了一个动物名
Animal_Dog dog;
dog.height = 60;
dog.weight = 100;
dog.Name = (char *)malloc(32);
memset(dog.Name, 0, 32);
strcpy_s(dog.Name, 7, "HuaHua");

第二种用法linux和windows驱动中都大量的使用到了。
--------------------- 
原文:https://blog.csdn.net/LH806732/article/details/51606526 
 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值