1、与#define不同,typedef给出的符号名称仅限于对类型,而不是对值。
2、typedef的解析由编译器,而不是预处理器执行。
3、虽然它的范围有限,但在其受限范围内,typedef比#define更灵活。
我们来看看typedef如何工作?
typedef unsigned char BYTE; (记得末尾要有“;”,这个与#define不一样)
随后我们就可以使用BYTE来定义变量啦; 如:BYTE x,y[10],*z;
又如:typedef char * STRING; 如果没有typedef,该例将STRING识别为一个char指针,有了这个关键字,使得STRING成为char指针的标识符。因此;STRING name,sign;意思是char *name,*sign;
但是,假如我们这样做,#define STRING char *
那么,将会被翻译成下面的形式;
char *name,sing;
typedef还可以用于结构体中;如:
typedef struct complex
{
float real;
float imag;
}COMPLEX;
这样,我们就可以用COMPLEX代替struct complex来表示。
使用typedef的另外一个原因是typedef的名称经常被用于复杂的类型,如:
typedef char (* FRPTC()) [5];
这把FRPTC声明为一个函数类型,该类型的函数返回一个指向由5个元素的char数组的指针。