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