Como, exatamente, o truque de seqüência dupla funciona?

Pelo menos algumC os pré-processadores permitem especificar o valor de uma macro, em vez de seu nome, passando-o por uma macro semelhante a uma função para outra que a especifica:

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

Casos de uso de exemploaqui.

Isso funciona, pelo menos no GCC e Clang (ambos com-std=c99), mas eu não tenho certezaquão funciona em termos de padrão C.

Esse comportamento é garantido pelo C99?
Em caso afirmativo, como o C99 garante isso?
Caso contrário, em que momento o comportamento passa de definido em C para definido pelo GCC?

questionAnswers(2)

yourAnswerToTheQuestion