1.定义一种类型的别名,而不只是简单的宏替换
typedef __uint16_t uint16_t; //__uint16_t是已经存在的类型,uint16_t为类型别名
2.用typedef来定义与平台无关的类型。
比如定义一个叫 REAL 的浮点类型,在目标平台一上,让它表示最高精度的类型为:
typedef long double REAL;
在不支持 long double 的平台二上,改为:
typedef double REAL;
在连 double 都不支持的平台三上,改为:
typedef float REAL;
也就是说,当跨平台时,只要改下 typedef 本身就行,不用对其他源码做任何修改。
标准库就广泛使用了这个技巧,比如size_t。
另外,因为typedef是定义了一种类型的新别名,不是简单的字符串替换,
所以它比宏来得稳健(虽然用宏有时也可以完成以上的用途)。
3.用在结构体struct中
用在旧的C的代码中(具体多旧没有查),帮助struct。以前的代码中,声明struct新对象时,必须要带上struct,
即形式为: struct 结构名 对象名,如:
struct tagPOINT1 (此处有一个struct)
{
int x;
int y;
};
struct tagPOINT1 p1; (此处也得写一个struct)
而在C++中,则可以直接写:结构名 对象名,即:
tagPOINT1 p1;
估计某人觉得经常多写一个struct太麻烦了,于是就发明了:
typedef struct tagPOINT
{
int x;
int y;
}POINT;
POINT p1; // 这样就比原来的方式少写了一个struct,哈哈,比较省事,尤其在大量使用的时候