Ajout à la solution de Pax, si vous avez une très grande liste de ces choses, il peut être plus simple de garder les choses ensemble et synchronisées si vous utilisez X-Macros. Ils sont un peu hackish, mais lorsqu'ils sont utilisés judicieusement, ils peuvent vraiment vous faire économiser beaucoup d'entretien ménager.
#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
Cela peut également activer certains comportements de mappage plus compliqués. Par exemple, vous pouvez facilement mettre en œuvre une recherche linéaire pour faire une correspondance inverse de chaîne à valeur 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 */
}
double possible de http://stackoverflow.com/questions/147267/easy-way-to-use- variables-de-enum-types-comme-chaîne-en-c –