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_t
和 uintmax_t
是实现支持的最大整数类型。这些类型是强制性的。
指定用法或提高可读性
如果一组数据有特定用途,可以使用 typedef
为其提供有意义的名称。此外,如果数据的属性发生变化,基本类型必须更改,则只需更改 typedef
语句,而不是检查整个程序。