Al menos algunos C preprocesadores le permiten stringize el valor de una macro, en lugar de su nombre, haciéndolo pasar a través de una macro-función como a otro que stringizes que:¿Cómo funciona exactamente el truco de doble cadena?
#define STR1(x) #x
#define STR2(x) STR1(x)
#define THE_ANSWER 42
#define THE_ANSWER_STR STR2(THE_ANSWER) /* "42" */
casos Ejemplo de uso here.
Esto funciona, al menos en GCC y Sonido metálico (ambos con -std=c99
), pero no estoy seguro de cómo funciona en términos C-estándar.
¿Este comportamiento está garantizado por C99?
Si es así, ¿cómo lo garantiza C99?
En caso negativo, ¿en qué punto el comportamiento pasa de definir C a definir GCC?
Si dices "al menos algo", ¿eso significa que has visto uno donde no funciona? Estoy dispuesto a escribir un informe de error para el proveedor. – Jens
@Jens: No; Yo no. Cada compilador que he usado (a saber, GCC y Clang) implementa este comportamiento. –