Linux C 编程 - typedef命令

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

typedef type name;

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

typedef unsigned char BYTE;BYTE c = 'a';

上面示例中,typedef命令为类型unsigned char 起别名BYTE, 然后就可以使用BYTE声明变量。typedef 可以一次指定多个别名。

typedef int INT1, INT2, INT3;

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

typedef 可以为指针起别名。

typedef int* intptr;int a = 11;intptr x = &a;

上面的示例中,intptr是int *的别名,不过,使用的时候要注意,这样不容易看出来,变量x是一个指针类型。typedef 也可以用来为数组类型起别名:

typedef int six_ints[6];six_ints arr = {11, 12, 13, 14, 15, 16};

上面示例中,six_ints是一个数组类型,包含6个整数的。

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;

上面的示例中,Tree为struct treenode* 的别名。

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

typedef struct test{  char *name;  int count;  int speed;} Test;

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

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

typedef struct{  char *name;  int count;  int speed;} Test;

上面示例相当于为一个匿名的数据结构起了一个别名Test。

3.typedef 方便以后为变量改类型

typedef float app_float;app_float f1, f2, f3;

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

typedef long double app_float;

上面命令将变量f1, f2, f3的类型都改为long double。

4.简化类型声明

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 是一个函数指针,指向一个无参数,返回字符值的函数。
发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章