typedef用法
typedef工具是一个高级数据特性,利用typedef可以为某一类型自定义名称。这方面与#define类似,但是
两者有三处不同:
- 与#define不同,typedef创建的符号只受限于类型,不能用于值;
- tyedef由编译器解释,不是预处理器;
- 在其受限范围内,typedef比#define更灵活;
使用typdef时要记住,typedef并没有创建任何新类型,它只是为某个已有的类型增加了一个方便使用的标签。
假设要用BYTE表示1字节的数组,只需要像定义个char类型变量一样定义BYTE,然后再定义前面加上关键字typedef即可:
typedef unsigned char BYTE;
随后便可使用 BYTE 来定义变量:
BYTE x, y[10];
该定义的作用域取决于typedef定义所在的位置。如果定义在函数中,就具有局部作用域,受限于定义所在的函数。如果定义在函数外面,就具有文件作用域。
为现有类型创建一个名称,看起来是多此一举,但是它有时的确很有用。在前面的示例中,用BYTE代 替unsigned char表明你打算用BYTE类型的变量表示数字而不是字符。使用typedef还能提高程序的可移植性。
用typedef来命名一个结构体类型的时候,可以省略该结构的标签(struct):
typedef struct
{
char name[50];
unsigned int age;
float score;
}student_info;
student_info student={“Bob”, 15, 90.5};
这样使用typedef定义的类型名会被翻译成:
struct {char name[50]; unsigned int age; float score;}
student = {“Bob”, 15, 90.5};
使用typedef的第二个原因是:tyedef常用于给复杂的类型命名,例如:
把pFunction声明为一个函数,该函数返回一个指针,该指针指向一个void型。
typedef void (*pFunction)(void);