typedef和#define不同,它不是简单的
文本替换。
用途一:
定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如:
char* pa, pb; // 只声明了一个指向字符变量的指针 和一个字符变量;
以下则可行:
typedef char* PCHAR;
PCHAR pa, pb; //声明了两个指向字符变量
用途二:
辅助struct。声明struct新对象时,必须要带上struct,即: struct 结构名 对象名,如:
struct tagPOINT1
{
int x;
int y;
};
声明新对象:struct tagPOINT1 p1;
而有了typedef:
typedef struct tagPOINT
{
int x;
int y;
}POINT;
POINT p1; // 这样就比原来的方式少写了一个struct,比较省事。
用途三:
用typedef来定义与平台无关的类型。
比如定义一个叫 REAL 的浮点类型,在目标平台一上,让它表示最高精度的类型为:
typedef long double REAL;
在不支持 long double 的平台二上,改为:
typedef double REAL;
在连 double 都不支持的平台三上,改为:
typedef float REAL;
也就是说,当跨平台时,只要改下 typedef 本身就行,不用对其他源码做任何修改。标准库就广泛使用了这个技巧,比如size_t。
记住:不管什么时候,只要为指针声明 typedef,那么都要在最终的 typedef 名称中加一个 const,以使得该指针本身是常量,而不是对象。