typedef为C语言的关键字,作用是为一种数据类型定义一个新名字。这里的数据类型包括内部数据类型(int,char等)和自定义数据类型。
与#define的区别定义一种类型的别名,而不只是简单的宏替换。可以用作同时声明指针型的多个对象。比如:
#define P int*
p pa, pb; // 这多数不符合我们的意图,它只声明了一个指向整型变量的指针和一个整型变量;
以下则可行:
typedef int* P;
P pa, pb;
以前的代码中,声明struct新对象时,必须要带上struct,即形式为: struct 结构名对象名,如:
struct tagPOINT1
{
int x;
int y;
};
struct tagPOINT1 p1;
而在C++中,则可以直接写:结构名对象名,即:tagPOINT1 p1;
为了简化C中的struct声明:
typedef struct tagPOINT
{
int x;
int y;
}POINT;
PoINT p1;//这样就比原来的方式少写了一个struct
这种说法是不是有点令人惊讶,typedef 就像 auto,extern,mutable,static,和 register 一样,是一个存储类关键字。这并不是说 typedef 会真正影响对象的存储特性;它只是说在语句构成上,typedef 声明看起来象 static,extern 等类型的变量声明。
typedef register int FAST_COUNTER; // 错误
编译通不过。问题出在你不能在声明中有多个存储类关键字。因为符号 typedef 已经占据了存储类关键字的位置,在 typedef 声明中不能用 register(或任何其它存储类关键字)。