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)