1. ホーム
  2. c

[解決済み] C言語でenum型の変数を文字列として使用する簡単な方法?

2023-02-11 12:34:33

質問

私がやろうとしていることは、次のようなことです。

typedef enum { ONE, TWO, THREE } Numbers;

以下のようなスイッチケースを行うような関数を書こうとしています。

char num_str[10];
int process_numbers_str(Numbers num) {
  switch(num) {
    case ONE:
    case TWO:
    case THREE:
    {
      strcpy(num_str, num); //some way to get the symbolic constant name in here?
    } break;
    default:
      return 0; //no match
  return 1;
}

毎回定義するのではなく、上記のようにenum変数を使って設定する方法はないでしょうか?

どのように解決するのですか?

組み込みの解決策はありません。最も簡単な方法は、配列の char* の配列で、enum の int 値がその enum の説明的な名前を含む文字列のインデックスになるようにすることです。もし、疎な enum (0から始まらないか、番号付けに隙間があるもの) がある場合、いくつかの int のマッピングが配列ベースのマッピングでは実用的でないほど高い場合、代わりにハッシュテーブルを使用することができます。