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