如何用## _ T理解C宏

时间:2016-02-26 17:23:07

标签: c++ c macros typedef

我在vulcan.h文件中找到了这个宏(The Vulcan API头文件)。我该怎么理解?

#define VK_DEFINE_HANDLE(object) typedef struct object##_T* object; 

特别是双哈希的用途是什么?

与(不同的星号位置)相比有何不同:

#define VK_DEFINE_HANDLE(object) typedef struct object##_T *object;

我知道它是结构类型定义但是该结构的主体在哪里?

1 个答案:

答案 0 :(得分:2)

##是预处理器concatenation。它正在从object宏的正式名称构建一个新令牌。

所以VK_DEFINE_HANDLE(foo)可能(并且可能是,除非foo_Tfoo扩展为其他内容)扩展到

typedef struct foo_T *foo;

可能还有其他东西(可能是其他一些宏扩展)正在定义struct foo_T

阅读C preprocessor的文档,例如GNU cpp