大家好!我对winnt.h中的这段代码有疑问:
#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;
以上代码摘自用Visual Studio 2013打开的winnt.h头文件。
我有两个问题:
第一个问题:
#if 0 && (_MSC_VER > 1000),因为有if 0,那么,这不是意味着下边那句
#define DECLARE_HANDLE(name) struct name##__; typedef struct name##__ *name
将永远不会被执行到吗?
既然如此,那为什么还要这样写?
是有什么特殊用意吗?如果是,那特殊的用意是什么?
第二个问题:
上面代码的第6行中,int unused是做什么用的?为什么命名为unused,是真的没有用吗?如果真的没用,那为什么不直接去掉这句而只保留一个空的结构体?如果有用,那作用是什么?
真诚期待大家给予解答,在这里先谢谢大家了!