Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした