我可以在C语言中使用void*代替LPVOID吗?

LPVOIDvoid*执行某些特殊功能。

最佳答案

C语言中没有LPVOID类型,这是Windows的事情。

这些事情之所以存在,是因为基础类型可以在不同版本之间变化而又不影响源代码。

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

typedef long INT32

瞧,您有32位整数类型。

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

这与将long用于32位整数类型时所要做的相反。您必须仔细阅读所有源代码,并确保更改了自己的定义。

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

在回答您的特定问题时,可以使用void*而不是LPVOID,只要不希望更改LPVOID的定义就可以。

但是我不会,以防万一。您永远不会知道Microsoft将来是否会引入某种不同的方式来处理通用指针,从而改变LPVOID的定义。使用Microsoft的类型并不会造成任何损失,但是如果他们更改了定义并且您决定使用基础类型,那么将来可能需要做一些工作。

您可能不会想到指针不会受到这种变化的影响,但是在Windows创建的最初8088天里,指针和内存模型(微小,小,大,巨大等)存在各种奇怪的现象,它们允许使用指针即使在同一环境中也要具有不同的大小。

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

10-11 03:03