为什么#if 0&& (_MSC_VER> 1000)定义了什么?

时间:2015-11-25 09:38:39

标签: c++ c visual-studio-2013

我在VS2013的winnt.h文件中找到了这个奇怪的代码。

#ifdef STRICT
typedef void *HANDLE;
#if 0 && (_MSC_VER > 1000)  // strange code is here...
#define DECLARE_HANDLE(name) struct name##__; typedef struct name##__ *name
#else
#define DECLARE_HANDLE(name) struct name##__{int unused;}; typedef struct name##__ *name
#endif

根据我的理解,当_MSC_VER定义为大于1000或小于1000时,此行#if 0 && (_MSC_VER > 1000应等于#if 0。为什么#if 0 && (_MSC_VER > 1000以这种奇怪的方式定义?

1 个答案:

答案 0 :(得分:1)

最有可能的是,它是生成的代码,在构建或打包过程的某个阶段注入了0,发现您的平台上不需要该功能。

为什么不删除整个#if而只保留#else正文因为(一般情况下)对于一个简单的工具来说会更加困难和容易出错:替换<{1}}可能看起来像#if <placeholder>的东西很容易。

我几乎考虑过试图弄清楚在这个特定情况下发生了什么,但后来我注意到它的WinNT代码,并决定维护我的理智遗留下来更重要。