1. ホーム
  2. c++

[解決済み] Macroの引数を文字列リテラルとして使用するには?

2023-01-08 06:41:25

質問

変数名の文字列リテラル表現と変数そのものを関数に渡すマクロをどのように書けばよいかを考えています。

たとえば、次の関数があるとします。

void do_something(string name, int val)
{
   cout << name << ": " << val << endl;
}

これができるようにマクロを書きたいと思います。

int my_val = 5;
CALL_DO_SOMETHING(my_val);

どちらが出力されるかというと my_val: 5

私は以下のようにしてみました。

#define CALL_DO_SOMETHING(VAR) do_something("VAR", VAR);

しかし、ご推察の通り、引用符の中のVARは置換されず、文字列リテラル "VAR"として渡されるだけです。そこで、マクロの引数が文字列リテラルそのものになるような方法があれば教えて頂きたいのですが。

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

プリプロセッサーを使う # 演算子 :

#define CALL_DO_SOMETHING(VAR) do_something(#VAR, VAR);