Al menos algunos preprocesadores de C le permiten secuenciar el valor de una macro, en lugar de su nombre, pasándolo de una macro similar a una función a otra que la secuencia:
#define STR1(x) #x
#define STR2(x) STR1(x)
#define THE_ANSWER 42
#define THE_ANSWER_STR STR2(THE_ANSWER) /* "42" */
Ejemplos de casos de uso aquí .
Esto funciona, al menos en GCC y Clang (ambos con -std=c99
), pero no estoy seguro de cómo funciona en términos estándar C.
¿Este comportamiento está garantizado por C99?
Si es así, ¿cómo lo garantiza C99?
Si no es así, ¿en qué punto pasa el comportamiento de definido por C a definido por GCC?