Almeno alcuni preprocessori C consentono di stringere il valore di una macro, piuttosto che il suo nome, facendolo passare attraverso una macro simile a una funzione a un'altra che lo stringa:
#define STR1(x) #x
#define STR2(x) STR1(x)
#define THE_ANSWER 42
#define THE_ANSWER_STR STR2(THE_ANSWER) /* "42" */
Esempi di casi d'uso qui .
Questo funziona, almeno in GCC e Clang (entrambi con -std=c99
), ma non sono sicuro di come funzioni in termini di standard C.
Questo comportamento è garantito da C99?
In caso affermativo, come lo garantisce C99?
In caso negativo, a che punto il comportamento passa da definito da C a definito da GCC?