作用:定义一种类型的别名,typedef并不是简单的宏替换
在windows编程中经常如下代码所示出现
#if defined(_WIN64)
typedef __int64 INT_PTR, *PINT_PTR;
typedef unsigned __int64 UINT_PTR, *PUINT_PTR;
typedef __int64 LONG_PTR, *PLONG_PTR;
typedef unsigned __int64 ULONG_PTR, *PULONG_PTR;
#define __int3264 __int64
#else
typedef _W64 int INT_PTR, *PINT_PTR;
typedef _W64 unsigned int UINT_PTR, *PUINT_PTR;
typedef _W64 long LONG_PTR, *PLONG_PTR;
typedef _W64 unsigned long ULONG_PTR, *PULONG_PTR;
#define __int3264 __int32
#endif
其实这个跟int a,b;是类似的
首先,_W64 为编译选项,在64 为编译器下,而且打开了/Wp64 编译选项时,编译器会对使用了__w64 的类型进行32 位到64 位移植性的判断
故在此可以忽略不看
简化为
typedef int INT_PTR, *PUINT_PTR;
先看第一句:
typedef int INT_PTR;
意思是为int 取一个别名INT_PTR ,则INT_PTR 和int 就是一样的意思,可以这样使用
INT_PTR a;
a = 10;
第二句:
typedef int *PUINT_PTR;
就是为int * 取一个别名PUINT_PTR ,则PUINT_PTR 代表的就是int 类型的指针,使用如下:
int a = 0;
PUINT_PTR b = &a;