用于同时创建枚举和数组条目的宏
Macro for creating an enum and array entry at once
我有一个字符串数组 (char*
)。例如:
char* strings[] =
{
"abc",
"def",
"ghi"
};
为了最好地通过索引引用它们,我需要创建一个单独的枚举:
typedef enum
{
abc = 0,
def,
ghi
} enum_strings_t;
假设我经常需要添加新条目,我需要在 2 个地方添加 - strings
数组和 enum_strings_t
枚举 - 需要手动保持它们同步。
我的问题是:这是否可以通过宏以某种方式修复,也就是说,只有 1 个新条目(而不是 2 个)会同时更新枚举和数组?我正在寻找一种在 C 中执行此操作的本机方法,而不使用将手动编辑头文件的外部 Python 脚本。
您可以使用所谓的 Xmacro。
#define XMACRO(X) \
X(abc) \
X(def) \
X(ghi)
#define TO_ENUM(NAME) NAME,
#define TO_STR(NAME) #NAME,
enum enum_str {
XMACRO(TO_ENUM)
};
char *string[] = {
XMACRO(TO_STR)
};
扩展为:
enum enum_str {
abc, def, ghi,
};
char *string[] = {
"abc", "def", "ghi",
};
我有一个字符串数组 (char*
)。例如:
char* strings[] =
{
"abc",
"def",
"ghi"
};
为了最好地通过索引引用它们,我需要创建一个单独的枚举:
typedef enum
{
abc = 0,
def,
ghi
} enum_strings_t;
假设我经常需要添加新条目,我需要在 2 个地方添加 - strings
数组和 enum_strings_t
枚举 - 需要手动保持它们同步。
我的问题是:这是否可以通过宏以某种方式修复,也就是说,只有 1 个新条目(而不是 2 个)会同时更新枚举和数组?我正在寻找一种在 C 中执行此操作的本机方法,而不使用将手动编辑头文件的外部 Python 脚本。
您可以使用所谓的 Xmacro。
#define XMACRO(X) \
X(abc) \
X(def) \
X(ghi)
#define TO_ENUM(NAME) NAME,
#define TO_STR(NAME) #NAME,
enum enum_str {
XMACRO(TO_ENUM)
};
char *string[] = {
XMACRO(TO_STR)
};
扩展为:
enum enum_str {
abc, def, ghi,
};
char *string[] = {
"abc", "def", "ghi",
};