一、注意事项
1.由于C语言里定义枚举变量时,如这样enum var_enum {a ,b ,c}
则使用的时候不能直接用 var_enum xx; 而是要enum var_enum xx;
所以下面的代码和引用文章的代码有一点差别。
2.宏定义里#号将记号转化为字符串。
详细可参考:CSDN:#号的作用
3.宏定义里##号表示把两个宏参数贴合在一起.
详细可参考:CSDN:#号和##号的作用
二、代码(1/2)
main.c
#include <stdio.h>
#include <string.h>
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
// expansion macro for enum value definition
#define ENUM_VALUE(name,assign) name assign,
// expansion macro for enum to string conversion
#define ENUM_CASE(name,assign) case name: return #name;
// expansion macro for string to enum conversion
#define ENUM_STRCMP(name,assign) if (!strcmp(str,#name)) return name;
/// declare the access function and define enum values
#define DECLARE_ENUM(EnumType,ENUM_DEF) \
enum EnumType { \
ENUM_DEF(ENUM_VALUE) \
}; \
const char *GetString(enum EnumType dummy); \
enum EnumType Get##EnumType##Value(const char *string); \
/// define the access function names
#define DEFINE_ENUM(EnumType,ENUM_DEF) \
const char *GetString(enum EnumType value) \
{ \
switch(value) \
{ \
ENUM_DEF(ENUM_CASE) \
default: return ""; /* handle input error */ \
} \
} \
enum EnumType Get##EnumType##Value(const char *str