列挙型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マクロは多用すべきではありませんが、利用方法を知っておくと便利な機能も存在します。