Zumindest einige C Präprozessoren können Sie den Wert eines Makros anstelle seines Namens stringisieren, indem Sie ihn durch ein funktionsähnliches Makro an ein anderes übergeben, das ihn stringisiert:
#define STR1(x) #x
#define STR2(x) STR1(x)
#define THE_ANSWER 42
#define THE_ANSWER_STR STR2(THE_ANSWER) /* "42" */
Beispielhafte Anwendungsfälle aquí .
Dies funktioniert, zumindest in GCC und Clang (beide mit -std=c99
), aber ich bin mir nicht sicher wie es funktioniert nach dem C-Standard.
Ist dieses Verhalten durch C99 garantiert?
Wenn ja, wie garantiert C99 dies?
Wenn nicht, an welchem Punkt geht das Verhalten von C-definiert zu GCC-definiert?