为类型声明一个新的替代名字,而不是声明一个指定类型的对象;是其他类型的同义词,而不是度里的类型。使用typedef定义一个易于记忆的、有意义的类型名,能清晰表是程序原的意图,使程序代码易于理解。

定义有意义的类型名,使程序易于理解

  1. typedef int
  2. COUNT i, j;

    这里将int类型定义为一个有意义的类型COUNT,当在程序中使用变量i、j就可以一目了然地知道他们用于计数的,提高程序的可读性,是程序易于理解。


定义的类型名可以隐藏复合的类型,如

  1. typedef int

将含一百个int类型元素的数组定义为array,每次需要使用含100个int类型元素的数组时,可以用下面的方法来定义:

  1. array arr;

    将数组类型隐藏了,并且不用每次在定义数组的时候都确定数组的大小,提高编码的效率。这种情况在需要相同类型相同大小的数组时才可以使用。

    另外,typedef还可以隐藏指针类型,我们也可以为指针类型定义一个有意义的、便于记忆的类型名,如:

  1. typedef char
  2. typedef const char

这样定义以后我们就可以用ptr去声明一个char 的变量,用cptr声明一个const char *类型的变量。

可以提高代码的可移植性。由于需要,我们可能会将程序放到另外的系统上运行,要是目标系统于当前使用的系统不一样的时候,程序可能不能正常工作。例如我们将pc己上的程序移植到嵌入式系统上,因为嵌入式系统的芯片限制,我们所使用的类型超过了表示范围。如果使用typedef,我们就可以很快的将程序修改了,如:

  1. typedef int

可能在嵌入式系统中需要用long类型才能表示pc系统上的int类型的数据范围,于是我们只要修改int32的定义就可以了:

  1. typedef long

这样只需要修改一行代码就可以解决问题了。

    总之,typedef都只是其他类型的同义词,不是独立的类型,它可以随意地为其他类型定义同义词——只要我们需要。

    可以通过结合struct、union、enum来获得独立的类型名。


1. typedef struct
2. char
3. int
4. char
5.  } student_t;

这样我们就获得了一个名为student_t的类型,可以直接在程序中使用student_t来定义变量了:

    1. student_t s = { "young", 20, "scrj"