当前位置:主页C 语言入门教程

13. typedef 命令

文章来源:知付 更新时间:2022-05-28 16:25 热度:165
目录
  • 简介

  • 主要好处

简介

typedef 命令用来为某个类型起别名。

typedef type name;

上面代码中, type 代表类型名, name 代表别名。

typedef unsigned char BYTE;

BYTE c = 'z';

上面示例中, typedef 命令为类型 unsign char 起别名 BYTE ,然后就可以使用 BYTE 声明变量。

typedef 可以一次指定多个别名。

typedef int antelope, bagel, mushroom;

上面示例中,一次性为 int 类型起了三个别名。

typedef 可以为指针起别名。

typedef int* intptr;

int a = 10;
intptr x = &a;

上面示例中, intptrint* 的别名。不过,使用的时候要小心,这样不容易看出来,变量 x 是一个指针类型。

typedef 也可以用来为数组类型起别名。

typedef int five_ints[5];

five_ints x = {11, 22, 33, 44, 55};

上面示例中, five_ints 是一个数组类型,包含5个整数的

typedef 为函数起别名的写法如下。

typedef signed char (*fp)(void);

上面示例中,类型别名 fp 是一个指针,代表函数 signed char (*)(void)

主要好处

typedef 为类型起别名的好处,主要有下面几点。

(1)更好的代码可读性。

typedef char* STRING;

STRING name;

上面示例为字符指针起别名为 STRING ,以后使用 STRING 声明变量时,就可以轻易辨别该变量是字符串。

(2)为 struct、union、enum 等命令定义的复杂数据结构创建别名,从而便于引用。

struct treenode {
  // ...
};

typedef struct treenode* Tree;

上面示例中, Treestruct treenode* 的别名。

typedef 也可以与 struct 定义数据类型的命令写在一起。

typedef struct animal {
  char* name;
  int leg_count, speed;
} animal;

上面示例中,自定义数据类型时,同时使用 typedef 命令,为 struct animal 起了一个别名 animal

这种情况下,C 语言允许省略 struct 命令后面的类型名。

typedef struct {
  char *name;
  int leg_count, speed;
} animal;

上面示例相当于为一个匿名的数据类型起了别名 animal

(3)typedef 方便以后为变量改类型。

typedef float app_float;

app_float f1, f2, f3;

上面示例中,变量 f1f2f3 的类型都是 float 。如果以后需要为它们改类型,只需要修改 typedef 语句即可。

typedef long double app_float;

上面命令将变量 f1f2f3 的类型都改为 long double

(4)可移植性

某一个值在不同计算机上的类型,可能是不一样的。

int i = 100000;

上面代码在32位整数的计算机没有问题,但是在16位整数的计算机就会出错。

C 语言的解决办法,就是提供了类型别名,在不同计算机上会解释成不同类型,比如 int32_t

int32_t i = 100000;

上面示例将变量 i 声明成 int32_t 类型,保证它在不同计算机上都是32位宽度,移植代码时就不会出错。

这一类的类型别名都是用 typedef 定义的。下面是类似的例子。

typedef long int ptrdiff_t;
typedef unsigned long int size_t;
typedef int wchar_t;

这些整数类型别名都放在头文件 stdint.h ,不同架构的计算机只需修改这个头文件即可,而无需修改代码。

因此, typedef 有助于提高代码的可移植性,使其能适配不同架构的计算机。

(5)简化类型声明

C 语言有些类型声明相当复杂,比如下面这个。

char (*(*x(void))[5])(void);

typedef 可以简化复杂的类型声明,使其更容易理解。首先,最外面一层起一个类型别名。

typedef char (*Func)(void);
Func (*x(void))[5];

这个看起来还是有点复杂,就为里面一层也定义一个别名。

typedef char (*Func)(void);
typedef Func Arr[5];
Arr* x(void);

上面代码就比较容易解读了。

  • x 是一个函数,返回一个指向 Arr 类型的指针。

  • Arr 是一个数组,有5个成员,每个成员是 Func 类型。

  • Func 是一个函数指针,指向一个无参数、返回字符值的函数。

分享到:

#免责声明#

版权声明:《 13. typedef 命令 》为作者 知付 原创文章,转载请注明原文地址!
本站所有文章,如无特殊说明或标注,均为本站原创或整合发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
本文地址:https://www.yoppunion.com/C%20%E8%AF%AD%E8%A8%80%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B/99.html
同类推荐
评论列表
签到

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

支付宝扫一扫打赏

微信扫一扫打赏

微信扫一扫打赏