我在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;
我知道它是结构类型定义但是该结构的主体在哪里?
答案 0 :(得分:2)
##
是预处理器concatenation。它正在从object
宏的正式名称构建一个新令牌。
所以VK_DEFINE_HANDLE(foo)
可能(并且可能是,除非foo_T
或foo
扩展为其他内容)扩展到
typedef struct foo_T *foo;
可能还有其他东西(可能是其他一些宏扩展)正在定义struct foo_T
阅读C preprocessor的文档,例如GNU cpp