最近,我正在阅读B-Human的一些代码,我发现了这个令人困惑的片段:
void enumInit(char* enums, const char** names, int numOfEnums);
#define ENUM(Enum, ...) \
enum Enum : unsigned char {__VA_ARGS__, numOf##Enum##s}; \
inline static const char* getName(Enum e) \
{ \
static char enums[] = #__VA_ARGS__; \
static const char* names[numOf##Enum##s]; \
static bool init = true; \
if(init) \
{ \
enumInit(enums, names, numOf##Enum##s); \
init = false; \
} \
return e >= numOf##Enum##s ? 0 : names[e]; \
}
Run Code Online (Sandbox Code Playgroud)
我无法理解这个宏是如何工作的,它怎么可能是宏定义中的函数定义?它是#pragma一次的单个cpp头文件.