В дополнение к решению Pax, если у вас есть очень большой список этих вещей, может быть проще хранить вещи вместе и синхронизировать, если вы используете X-Macros . Они немного хакерские, но при разумном использовании они действительно могут сэкономить вам много домашнего хозяйства.
#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
Это также может включить некоторые более сложные способы отображения. Например, вы можете легко реализовать линейный поиск, чтобы выполнить обратное отображение строки в значение enum:
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 */
}