#ifdef STRICT
typedef void *HANDLE;
#define DECLARE_HANDLE(name) struct name##__ { int unused; }; typedef struct name##__ *name
#else
typedef PVOID HANDLE;
#define DECLARE_HANDLE(name) typedef HANDLE name
#endif
typedef HANDLE *PHANDLE;
以上是摘录windws.h里的东东。
没看懂其意思, 我觉得还是我的c基础太差导致的。
解读这2句:
typedef void *HANDLE;
#define DECLARE_HANDLE(name) struct name##__ { int unused; }; typedef struct name##__
意思是首先 HANDLE是一个void* 类型
然后又成为了一个 结构体指针。
是不是疯了? 把两种类型定义为HANDLE.
难道可以这样使用嘛?
typedef int* pMyInt;
typedef short* PMyInt;
这2句难道对嘛??
------解决方案--------------------------------------------------------
这句是一个宏, 宏的名字是DECLARE_HANDLE, 和HANDLE没有半毛钱关系, 这个宏接受一个参数 name, 构造一个动态的结构
#define DECLARE_HANDLE(name) struct name##__ { int unused; }; typedef struct name##__ *name
// 假设你代码为
DECLARE_HANDLE(CSDN);
// 自动扩展为
struct nameCSDN__ { int unused; };
typedef struct nameCSDN__ *name;
就是这样.

------解决方案--------------------------------------------------------
VS2012上面STRICT是定义的.
#ifdef STRICT
typedef void *HANDLE;
#if 0 && (_MSC_VER > 1000)
#define DECLARE_HANDLE(name) struct name##__; typedef struct name##__ *name
#else
#define DECLARE_HANDLE(name) struct name##__{int unused;}; typedef struct name##__ *name
#endif
#else
typedef PVOID HANDLE;
#define DECLARE_HANDLE(name) typedef HANDLE name
#endif
typedef HANDLE *PHANDLE;
------解决方案--------------------------------------------------------
纠正一下,typdef 语句是申明语句,不存在重复定义的说法。