C语言中用户定义类型(typedef)的作用 |
您所在的位置:网站首页 › C语言中3的1314次方要用什么类型定义 › 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 |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |