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

您所在的位置:网站首页 C语言中3的1314次方要用什么类型定义 C语言中用户定义类型(typedef)的作用

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

2024-07-13 03:16| 来源: 网络整理| 查看: 265

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