Q&A
解決済
1回答
2641閲覧
総合スコア56
C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。
0グッド
0クリップ
投稿2020/06/08 05:58
0
C言語のenumで逆引きする方法はありますか。
一般的には文字列で索引して、定数を得るのが普通ですが、定数で索引して、対応する文字列を取り出したいです。 例えば、下のコードで0x1000で索引し、INITを取り出したいです。
enumじゃなくても良い方法があれば、アドバイスください。
typedef enum{ INIT = 0x1000, SLEEP = 0x2000, NORMAL = 0x4000 }enum_Def;
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
質問へのコメント
回答1件
ベストアンサー
プリプロセッサで文字列化しています。
C1#include <stdio.h> 2typedef enum { 3 4 INIT = 0x1000, 5 SLEEP = 0x2000, 6 NORMAL = 0x4000 7 8}enum_Def; 9 10#define CASE2STR(x) case x: return #x; 11 12const char* enum2str(enum_Def e) 13{ 14 switch (e) 15 { 16 CASE2STR(INIT) 17 CASE2STR(SLEEP) 18 CASE2STR(NORMAL) 19 } 20 return "Unknown"; 21} 22 23int main(void) 24{ 25 printf("%s\n", enum2str(INIT)); 26 return 0; 27}
C
1#include <stdio.h> 2typedef enum { 3 4 INIT = 0x1000, 5 SLEEP = 0x2000, 6 NORMAL = 0x4000 7 8}enum_Def; 9 10#define CASE2STR(x) case x: return #x; 11 12const char* enum2str(enum_Def e) 13{ 14 switch (e) 15 { 16 CASE2STR(INIT) 17 CASE2STR(SLEEP) 18 CASE2STR(NORMAL) 19 } 20 return "Unknown"; 21} 22 23int main(void) 24{ 25 printf("%s\n", enum2str(INIT)); 26 return 0; 27}
投稿2020/06/08 06:11
総合スコア4079
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
15分調べてもわからないことはteratailで質問しよう!
ただいまの回答率85.25%
質問をまとめることで思考を整理して素早く解決
テンプレート機能で簡単に質問をまとめる
C言語のenumで逆引きする方法