71
58

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

列挙型enumの列挙定数を文字列に変換する方法【C,C++】

Last updated at Posted at 2015-05-18

列挙型enumの列挙定数を文字列に変換する方法

enumで宣言した列挙定数を文字列に変換したいときのためのプチテクニック。

なお逆に、文字列を列挙定数に変換したいときはこちら→文字列を対応する列挙定数(enum)に変換する【C++】

defineマクロの#演算子(文字列化演算子)は、マクロの引数を見たままの文字列リテラルに置き換えてくれるのでこれを利用することで簡単に実装が可能です。

test.c
#include <stdio.h>

#define STR(var) #var	//引数にした変数を変数名を示す文字列リテラルとして返すマクロ関数

int main() {
	enum color_tag{
		RED,
		BLUE,
		GREEN
	};

	printf("%s : %d\n", STR(RED), RED);
	printf("%s : %d\n", STR(BLUE), BLUE);
	printf("%s : %d\n", STR(GREEN), GREEN);

	return 0;
}

結果

RED : 0
BLUE : 1
GREEN : 2

この程度であれば"RED"と直接書く方法もありますが、もう少し複雑になって平文を書きたくないシーンでは有効です。

enumで宣言した列挙子そのものを文字列として比較や出力に利用したしたかったのですが、検索しても.NET FrameworkのEnum.ToString()など複雑な方法しか見つかりませんでした。
defineマクロは多用すべきではありませんが、利用方法を知っておくと便利な機能も存在します。

71
58
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
71
58

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?