c-preprocessor stringification

c preprocessor - Preprocesador C, Stringify el resultado de una macro



c-preprocessor stringification (2)

Me gusta esto:

#include <stdio.h> #define QUOTE(str) #str #define EXPAND_AND_QUOTE(str) QUOTE(str) #define TEST thisisatest #define TESTE EXPAND_AND_QUOTE(TEST) int main() { printf(TESTE); }

La razón es que cuando los macro argumentos se sustituyen en el cuerpo de la macro, se expanden a menos que aparezcan con los operadores del preprocesador # o ## en esa macro. Entonces, str (con valor TEST en su código) no se expande en QUOTE , sino que se expande en EXPAND_AND_QUOTE .

Quiero stringify el resultado de una macro expansión.

He intentado con lo siguiente:

#define QUOTE(str) #str #define TEST thisisatest #define TESTE QUOTE(TEST)

Y TESTE se expande a: "TEST", mientras trato de obtener "thisisatest". Sé que este es el comportamiento correcto del preprocesador, pero ¿alguien puede ayudarme con una manera de lograr el otro?

Using TESTE #TEST is not valid Using TESTE QUOTE(thisisatest) is not what I''m trying to do


Para aclarar un poco más, esencialmente el preprocesador se hizo para ejecutar otra "etapa". es decir:

Primer caso:

->TESTE ->QUOTE(TEST) # preprocessor encounters QUOTE # first so it expands it *without expanding its argument* # as the ''#'' symbol is used ->TEST

Segundo caso:

->TESTE ->EXPAND_AND_QUOTE(TEST) ->QUOTE(thisisatest) # after expanding EXPAND_AND_QUOTE # in the previous line # the preprocessor checked for more macros # to expand, it found TEST and expanded it # to ''thisisatest'' ->thisisatest