zpcdcsdn 2015-07-17 13:21 采纳率: 0%
浏览 1648

关于winnt.h头文件中有关句柄(HANDLE)的一段源代码的两个疑问,求大神解答。

大家好!我对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,是真的没有用吗?如果真的没用,那为什么不直接去掉这句而只保留一个空的结构体?如果有用,那作用是什么?

真诚期待大家给予解答,在这里先谢谢大家了!

  • 写回答

4条回答 默认 最新

  • zuishikonghuan 2015-07-17 14:01
    关注

    问题1。关于if 0
    包括我这种强迫症,对于低版本的代码,在新版中不需要或有更好的方法以后,不舍得删掉辛苦写的旧代码,就喜欢用if (0)围起来作废,而编译优化会在编译时自动忽略掉这些代码的。
    问题2。微软这么做肯定有他的用意,也许现在没用但,或许将来有用呢

    评论

报告相同问题?

悬赏问题

  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?