gpt4 book ai didi

c++ - winnt.h 中大写 VOID 宏和 INT typedef 的用途

转载 作者:可可西里 更新时间:2023-11-01 12:57:27 30 4
gpt4 key购买 nike

有人知道为什么在 winnt.h header 中定义了一个大写的 VOID 宏吗?

更令人困惑的是,VOID 是一个宏,而 CHARSHORTINTLONG 是类型定义。

请参阅 winnt.h 中的相关摘录:

#ifndef VOID
#define VOID void
typedef char CHAR;
typedef short SHORT;
typedef long LONG;
#if !defined(MIDL_PASS)
typedef int INT;
#endif
#endif

使用 VOID* pointer 而不是 void* pointer 可能是历史原因?

编辑:更令人不安的是,今天 .您还可以将其视为 MSDN 文档的一部分,例如http://msdn.microsoft.com/en-us/library/bb205867(v=vs.85).aspx

最佳答案

Windows API 很旧。 真的老了。比官方 C 标准老。

这意味着,一开始,Windows API 必须处理各种具有不同级别语言支持的古老 C 编译器。有些可能不支持 void。有些可能具有与 Windows 认为的 int 不兼容的 int 类型。有些人可能不理解short。作为一种解决方法,Windows API 提供了大写的可移植等效项,这些等效项别名为适用于该特定编译器的任何内容。

当然,有了现代编译器,事情已经安定下来了。例如,每个人都支持 void。但是,为了保持与使用这些大写宏的旧代码的兼容性,#definetypedef 必须保留。

关于c++ - winnt.h 中大写 VOID 宏和 INT typedef 的用途,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6669078/

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