[Cプリプロセッサ] マクロ引数の文字列化

C言語のプリプロセッサにおいて、引数付きマクロの引数を文字列化したいときがある。

たとえば、

int variable = 1;
DEBUG_PRINT(variable);

とすると、

printf("%s is %d", "variable", 1);

のように置換されるマクロを定義したい場合。

#define DEBUG_PRINT(x) printf("%s is %d", "x", 1)

としても、

printf("%s is %d", "x", 1);

と出力されてしまい、望む結果が得られない。

このようなときは、引数の文字列化機能を使用する。

引数名の先頭に`#’をつけることで、引数の文字列定数表現を得ることができる。

上の例の場合は次のようにする。

#define DEBUG_PRINT(x) printf("%s is %d",  #x, x)

参考
The C Preprocessor

Leave a Reply

Your email address will not be published. Required fields are marked *

*