gpt4 book ai didi

c - LPVOID 和 void* 之间的区别

转载 作者:太空狗 更新时间:2023-10-29 16:20:00 24 4
gpt4 key购买 nike

我可以在 C 中使用 void* 而不是 LPVOID 吗?

或者 LPVOIDvoid* 执行一些特殊的功能。

最佳答案

C 中没有 LPVOID 类型,这是 Windows 的东西。

存在这些东西的原因是底层类型可以在不影响您的源代码的情况下从一个版本更改到另一个版本。

例如,假设微软 C 编译器的早期版本有一个 16 位的 int 和一个 32 位的 long。他们可以简单地使用:

typedef long INT32

而且,瞧,你有你的 32 位整数类型。

现在让我们向前推进几年,Microsoft C 使用 32 位 int 和 64 位 long。为了仍然让您的源代码正常运行,他们只需将 typedef 行更改为:

typedef int INT32

如果您对 32 位整数类型使用 long,这与您必须执行的操作形成对比。您必须检查所有您的源代码并确保您更改了自己的定义。

从兼容性的角度(不同版本的 Windows 之间的兼容性)来看,使用 Microsoft 的数据类型要干净得多。

在回答您的特定问题时,使用 void* 代替 LPVOID 可能没问题 提供了 LPVOID 预计不会更改。

但我不会,以防万一。您永远不知道 Microsoft 将来是否会引入一些不同的处理通用指针的方法,这会改变 LPVOID 的定义。使用 Microsoft 的类型实际上不会损失任何东西,但如果他们更改了定义并且您决定使用基础类型,您可能将来需要做一些工作。

您可能认为指针不会受到这种变化的影响,但在创建 Windows 的最初 8088 天里,指针和内存模型(微小、小型、大型、巨大等)存在各种怪异之处即使在同一环境中,也允许指针具有不同的大小。

关于c - LPVOID 和 void* 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1987957/

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