Wie genau funktioniert der Double-Stringize-Trick?

Zumindest einigeCit @ -Preprozessoren können Sie den Wert eines Makros anstelle seines Namens als String definieren, indem Sie ihn durch ein funktionsähnliches Makro an ein anderes übergeben, das ihn als String definiert:

#define STR1(x) #x
#define STR2(x) STR1(x)
#define THE_ANSWER 42
#define THE_ANSWER_STR STR2(THE_ANSWER) /* "42" */

BeispielanwendungsfälleHie.

Dies funktioniert zumindest in GCC und Clang (beide mit-std=c99), aber ich bin mir nicht sicherWi es funktioniert nach C-Standard.

Ist dieses Verhalten durch C99 garantiert?
Wenn ja, wie garantiert C99 das?
Wenn nicht, zu welchem Zeitpunkt wechselt das Verhalten von C-Defined zu GCC-Defined?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage