typedef篇
介绍三种工程项目常用的用法
用法1、类型别名
常用于定义句柄类型、返回值类型等快捷方式类型。易于理解含义和方便的类型别名。
如,定义接口时,大量供其他人调用的接口中,返回值均为long,如果直接这样写:
long interface1();
long interface2();
固然可以,但别人作为调用者,在不知情的情况下是不知道long会返回出什么值的。此时我们可以这样定义:
typedef long RESULT;
RESULT interface1();
RESULT interface2();
就算不写文档,调用者也会很清楚的知道,他调用接口后将会得到一个RESULT值,根据预定义的RESULT值列表,就可以知道是接口调用成功了,还是失败了,或是其他状态值。
再如,定义引擎时,引擎的句柄,如果直接这样写:
void * Foo_CreateEngine();
不如这样写清晰明了,同时在之后,可以直接用,而不需要写代码的时候,每次写到这都要加一个“*”
typedef void * MHandle;
MHandle Foo_CreateEngine();
void Foo_DestroyEngine(MHandle handle);
用法2、结构体类型别名
typedef struct
{
int a;
}TEMP_STRUCT,*PTEMP_STRUCT;
意思是定义一个新的类型TEMP_STRUCT,它是一个形如struct{int a;}的结构体,同时定义一个新的结构体指针类型*PTEMP_STRUCT,以便于之后使用。如:
TEMP_STRUCT tempStruct={0};
如:
void interface(PTEMP_STRUCT pTempStruct);
用法3、跨平台基本数据类型别名
有些数据类型只支持个中平台,所以在使用数据类型前,都会将用到的数据类型typedef重新定义一遍,代码中只用重定义的类型即可,当平台改变时,修改typedef即可。
当然也可以根据平台既定宏来控制。
如:(这是随便写的,不可做实际代码用)
#if defined(WIN32)
typedef unsigned short MWChar;
#else
typedef signed short MWChar;
#endif
……
MWChar mwChar;