我可以在C语言中使用void*
代替LPVOID
吗?
或LPVOID
比void*
执行某些特殊功能。
最佳答案
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/