少なくとも一部のCプリプロセッサでは、マクロを文字列化する関数のようなマクロから別のマクロに渡すことで、マクロの名前ではなく値を文字列化できます。
#define STR1(x) #x
#define STR2(x) STR1(x)
#define THE_ANSWER 42
#define THE_ANSWER_STR STR2(THE_ANSWER) /* "42" */
ここでの使用例の例。
これは、少なくともGCCとClang(両方とも-std=c99
)では機能しますが、C標準の用語でどのように機能するかはわかりません。
この動作はC99によって保証されていますか?
もしそうなら、C99はどのようにそれを保証しますか?
そうでない場合、動作はどの時点でC定義からGCC定義に移行しますか?