C语言中用户定义类型(typedef)的作用

typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括基本数据类型(int,char等)和自定义的数据类型(struct等),但不能创建新类型

在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。

比如,写一个int型的变量,我们能从名字知道它大概的含义,但我们不能知道这个变量的属性是什么。有人会说,它是int类型啊,但int类型占多少字节,不是一个确定的值。

int可能占2字节、4字节、8字节,假如这个变量用在网络数据包里,我怎么确定它的长度是一定的呢?

解决的办法是:

typedef int int32_t;

然后代码里一个int都不要用,都用int32_t,一旦换了平台,那么只改typedef,就可以搞定了。

当然了,我还可以这样定义:

typedef int reg32_t;

以后我再用reg32_t的时候,我就知道它是一个硬件寄存器变量的类型,宽度是32bit大小。

有人会说宏也可以解决这样的问题。

下面是一个坑:

typedef (int *) PTR;
#define PTR     int*

看上去一样吗?好像一样,但如果遇到下面的情况:

PTR a, b;

用typedef等价于

int *a, *b;

用宏等价于

int *a, b;

用宏的话,b就不是指针类型了。

所以typedef的存在是解决一些宏定义的问题,让代码更好看。

对于网络、驱动等等关注变量类型字节宽度的地方,typedef作用很重要。并且,不知道有多少人体验过64位编程,64位C语言里,我见过的有LP64,ILP64,LLP64,大概的意思是:

这里写图片描述

为了应付各种奇葩的编译器,最好的办法是自己定义好类型,用自己的类型,当需要迁移到新平台时,改几个头文件就可以了。

这也是为什么各个操作系统都热衷于定义一套自己的类型,而不推荐直接使用C语言默认类型的原因(Windows里有DWORD,Linux里有u_int32_t)。

另外,宏也好,typedef也好,都是为了提高代码可读性,如果只是为了表现自己用了多少复杂的东西而特意用这些玩意,还是别用的好。

此文转自:http://www.zhihu.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值