gpt4 book ai didi

c++ - 为什么定义#if 0 && (_MSC_VER > 1000)?

转载 作者:行者123 更新时间:2023-11-28 05:57:14 27 4
gpt4 key购买 nike

我在 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由构建或打包过程的某个阶段注入(inject),发现该功能在您的平台上是不必要的。

为什么它不删除整个 #if并只保留 #else body 因为(一般来说)对于一个简单的工具来说,这样做会更加困难和容易出错:替换可能看起来像 #if <placeholder> 的东西与 #if 0很容易。

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

关于c++ - 为什么定义#if 0 && (_MSC_VER > 1000)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33913003/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com