Я склонен использовать подход статического массива. Это все еще клуге, но оно достаточно ясное и работает.
enum {
typeA = 3,
typeB = 4,
NUM_LETTERS = 5
} Letters;
static const char* letterNames[NUM_LETTERS] {
"", "", "",
"3",
"4"
};
printf("The string is " letterNames[(int)typeA] ".\n");
Похоже, что ответ Кристофа хорош, но я должен честно сказать, что я недостаточно знаком с макросами, чтобы понять его; -)
Редактировать; Другой способ: вы упоминаете, что вам нужна «статическая строка», но я не уверен, что она вам нужна во время компиляции. Можете ли вы использовать sprintf в начале выполнения? Это решение будет выглядеть примерно так ...
enum {
typeA = 3,
typeB = 4,
NUM_LETTERS = 5
} Letters;
int main(void){
char * typeAString = new char[sizeof("This is at least as long as the typeA string")];
sprintf(typeAString, "This is the %d string", typeA);
// use your string here
return 0;
}
То, как я использовал new здесь, не то, что я бы порекомендовал, но оно показывает идею использования sprintf в вашей программе.