gpt4 book ai didi

c++ - 这个C++宏是什么意思?

转载 作者:可可西里 更新时间:2023-11-01 17:16:10 26 4
gpt4 key购买 nike

我不明白这个宏是什么意思:

#define DECLARE_HANDLE(n) typedef struct n##__{int i;}*n

DECLARE_HANDLE(HWND);

我从 C 程序中了解到:

"##" means connect the parameter.

所以宏等于:

typedef struct HWND__{int i;}*HWND

这样对吗?

如果是对的,那句话是什么意思?

==================

来自游戏 Bombermaaan(适用于 Windows 和 Linux)的代码,
链接http://sourceforge.net/p/bombermaaan/code/HEAD/tree/trunk/src/Bombermaaan/winreplace.h ,
第 90 行。

最佳答案

此构造的主要目的是防止句柄的误用。如果所有句柄都是 void *intlong long 或其他一些基本类型,没有什么可以阻止您使用一个而不是其他。指向 struct HWND__ 的指针和指向 struct HBITMAP__ 的指针不是一回事,因此如果您有以下代码:

HWND hwnd;
HBITMAP hbmp;

hbmp = GetBitmap(...);
hwnd = hbmp; // gives compiler error.

这是一种相当经典的技术,可确保您获得 API 供应商不想为其提供真实声明的内容的唯一类型。虽然我不完全确定为什么他们甚至需要适当的结构声明,但您可能可以逃脱:

#define DECLARE_HANDLE(n) struct n ## __; struct n ## __ *n;

这也将确保任何取消引用 HWND 都是不可能的,因为编译器将反对“使用不完整的类型”。

关于c++ - 这个C++宏是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16669295/

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