用于同时创建枚举和数组条目的宏

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",
};