【发布时间】:2013-05-16 04:16:52
【问题描述】:
我不知道这个宏是什么意思:
#define DECLARE_HANDLE(n) typedef struct n##__{int i;}*n
DECLARE_HANDLE(HWND);
我从 C 程序中了解到:
“##”表示连接参数。
所以宏等于:
typedef struct HWND__{int i;}*HWND
是这样吗?
如果是对的,那句话是什么意思?
===================
来自 Bombermaaan 游戏的代码(适用于 Windows 和 Linux),
链接http://sourceforge.net/p/bombermaaan/code/HEAD/tree/trunk/src/Bombermaaan/winreplace.h,
第 90 行。
【问题讨论】:
-
这是什么意思? #define INVALID_SOCKET (SOCKET)(~0)
-
~是 logical not 运算符,在这种情况下,它将还原您放入 0 的数字的所有位。char sock = INVALID_SOCKET;将是 0xFF,int sock = INVALID_SOCKET将是 0xFFFFFFFF。 -
感谢@Sean 提出这个问题,一个好问题。并感谢 Xgbi 的详细回答。
-
这部分意味着有人喜欢创建无效标识符。包含两个连续下划线的名称保留给实现,不应在任何其他代码中使用。
-
@xgbi,我认为
!是逻辑非运算符。~最好使用按位非运算符。
标签: c++ macros concatenation c-preprocessor