Typedef 的简单用法

用于为数据类型指定短名称

代替:

long long int foo;
struct mystructure object;

一个人可以使用

/* write once */
typedef long long ll;
typedef struct mystructure mystruct;

/* use whenever needed */
ll foo;
mystruct object;

如果在程序中多次使用该类型,这会减少所需的键入量。

提高便携性

数据类型的属性因不同的体系结构而异。例如,int 在一个实现中可以是 2 字节类型而在另一个实现中可以是 4 字节类型。假设程序需要使用 4 字节类型才能正确运行。

在一个实现中,让 int 的大小为 2 字节,long 的大小为 4 字节。另一方面,int 的大小为 4 字节,long 的大小为 8 字节。如果程序是使用第二个实现编写的,

/* program expecting a 4 byte integer */
int foo; /* need to hold 4 bytes to work */
/* some code involving many more ints */

要使程序在第一个实现中运行,所有 int 声明都必须更改为 long

/* program now needs long */
long foo; /*need to hold 4 bytes to work */
/* some code involving many more longs - lot to be changed */

为避免这种情况,可以使用 typedef

/* program expecting a 4 byte integer */
typedef int myint; /* need to declare once - only one line to modify if needed */
myint foo; /* need to hold 4 bytes to work */
/* some code involving many more myints */

然后,每次只需更改 typedef 语句,而不是检查整个程序。

Version >= C99

<stdint.h> 标头和相关的 <inttypes.h> 标头为各种大小的整数定义标准类型名称(使用 typedef),这些名称通常是需要固定大小整数的现代代码中的最佳选择。例如,uint8_t 是无符号的 8 位整数类型; int64_t 是带符号的 64 位整数类型。uintptr_t 类型是一个无符号整数类型,足以容纳任何指向对象的指针。这些类型在理论上是可选的 - 但很少有它们不可用。有一些变体,如 uint_least16_t(最小的无符号整数类型,至少 16 位)和 int_fast32_t(最快的有符号整数类型,至少 32 位)。此外,intmax_tuintmax_t 是实现支持的最大整数类型。这些类型是强制性的。

指定用法或提高可读性

如果一组数据有特定用途,可以使用 typedef 为其提供有意义的名称。此外,如果数据的属性发生变化,基本类型必须更改,则只需更改 typedef 语句,而不是检查整个程序。