添加到Pax的解決方案中,如果您有很多這些東西的列表,如果您使用X-Macros,將事物放在一起並同步可能會更簡單。他們有點ha,,但如果明智地使用它們,他們真的可以爲你節省很多家務。
#define X_TEST_CASE_LIST \
X(TC_HIW_0019, 0, "TC_HIW_0019") \
X(TC_HIW_0020, 1, "TC_HIW_0020") \
X(TC_HIW_0021, 2, "TC_HIW_0021") \
/* ... */
#define X(id, val, str) id = val,
typedef enum testCaseId {
X_TEST_CASE_LIST
} testCaseId;
#undef X
#define X(id, val, str) str,
char *testCaseDesc[] = {
X_TEST_CASE_LIST
};
#undef X
這也可以啓用一些更復雜的映射行爲。例如,你可以很容易地實現線性搜索做一個反向映射從字符串到枚舉值:的
int string_to_enum(const char *in_str) {
if (0)
#define X(id, val, str) else if (0 == strcmp(in_str, str)) return val;
X_TEST_CASE_LIST
#undef X
return -1; /* Not found */
}
可能重複http://stackoverflow.com/questions/147267/easy-way-to-use-變量 - 的 - 枚舉類型,如串式-C – 2010-04-20 09:15:38