1.为语言即定义的类型或自己声明的类型构建一个简短或更有意义的别名。typedef不是新建了一种类型而仅仅是为已知类型起个别名。
2.不能在函数定义内部使用typedef。
3.不能使用typedef为类声明的新名字用作类的构造函数和析构函数名。
4.typedef可以为同一类型重复声明。但不能为不同类型声明相同名称。
例1:
// FILE1.H
typedef char CHAR;
// FILE2.H
typedef char CHAR;
// PROG.CPP
#include "file1.h"
#include "file2.h"
CHAR x = 'a'; // 成功
例2:
// FILE1.H
typedef char CHAR;
// FILE2.H
typedef char CHAR2;
// PROG.CPP
#include "file1.h"
#include "file2.h"
CHAR x = 'a'; // 成功
CHAR2 y = 'b'; // 成功
例3:
// FILE1.H
typedef char CHAR;
// FILE2.H
typedef int CHAR;
// PROG.CPP
#include "file1.h"
#include "file2.h" //错误
5.typedef声明的新名字与普通标识符拥有相同的名字空间。所以在程序中的局部变量和typedef声明的新名字可以同名。
例1:
// typedef_names1.cpp
typedef unsigned long UL; // 声明了unsigned long的别名UL
int UL; // 变量UL与上述UL的名字空间相同,发生重复定义错误
例2:
// typedef_names2.cpp
typedef unsigned long UL; // 声明了unsigned long的别名UL
int main()
{
unsigned int UL; // 变量UL的范围仅位于main()函数内,与上述UL的名字空间不同,成功
}
typedef和#define
typedef char* CH;
CH a, b;
#define char* CH;
CH a,b;
b就不是指针类型了。