gpt4 book ai didi

c++ - typedef 一个指向指针的类型

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:25:04 26 4
gpt4 key购买 nike

所以,通常我们 typedef 到另一个类型或函数指针,但是 typedef 一个指针的类型对我来说很奇怪。例如,在 winnt.h 中我们得到:

typedef void *HANDLE;
typedef PVOID HANDLE;

PVOID 是:

typedef void *PVOID,*LPVOID;

据此,在第一条语句中它必须是*HANDLE,因为它是指向void 的指针,而PVOID 已经是指向void 的指针,因此不需要声明为指针。

但是,typedef a type to a pointer 有什么好处呢?是不是更困惑了?

最佳答案

what's the benefit of typedef a type to a pointer? Isn't it more confusing?

通常,模块/库需要维护一些内部状态才能正常运行。需要在为此模块/库调用的每个 api 上读取/验证此内部状态。因此模块的用户需要将此信息传递给他们调用的每个 api。但是库的实现者不希望库的用户能够看到这个维护状态的内容,因为如果允许的话,有人可能会恶作剧或诚实地修改状态,其结果可能对模块来说是激烈的。为了避免这种情况,模块将它们的状态维护变量屏蔽为 void*,这样现在它对模块的用户来说是不透明的(它的内容不可见)。为了让用户不对使用void *感到困惑,他们通常将void *定义为HANDLE,这是为了便于使用模块/库的客户端。

至于提到的代码:

typedef void *PVOID,*LPVOID;

意味着以后无论你在哪里提到PVOID,它都将被视为void *类型。
所以在,

typedef PVOID HANDLE; 

相当于:

typedef void *HANDLE; 

因为 PVOID 只不过是 void *

关于c++ - typedef 一个指向指针的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7963443/

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