我在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
以这种奇怪的方式定义?
答案 0 :(得分:1)
最有可能的是,它是生成的代码,在构建或打包过程的某个阶段注入了0
,发现您的平台上不需要该功能。
为什么不删除整个#if
而只保留#else
正文因为(一般情况下)对于一个简单的工具来说会更加困难和容易出错:替换<{1}}可能看起来像#if <placeholder>
的东西很容易。
我几乎考虑过试图弄清楚在这个特定情况下发生了什么,但后来我注意到它的WinNT代码,并决定维护我的理智遗留下来更重要。