Przynajmniej niektóre preprocesory języka C pozwalają na zdefiniowanie wartości makra, a nie jego nazwy, poprzez przekazanie go przez jedno makro podobne do funkcji do drugiego, które je określa:
#define STR1(x) #x
#define STR2(x) STR1(x)
#define THE_ANSWER 42
#define THE_ANSWER_STR STR2(THE_ANSWER) /* "42" */
Przykładowe przypadki użycia tutaj .
To działa, przynajmniej w GCC i Clang (oba z -std=c99
), ale nie jestem pewien, jak to działa w warunkach standardu C.
Czy takie zachowanie gwarantuje C99?
Jeśli tak, w jaki sposób C99 to gwarantuje?
Jeśli nie, w którym momencie zachowanie zmienia się ze zdefiniowanego w C na zdefiniowane w GCC?