Cuando utilizo este código:¿Cuál es la diferencia entre las macros "#define STR (x) #x" y "#define STR (x) VAL (x)" con "#define VAL (x) #x"?
#include <stdio.h>
#define STR(x) #x
int main(void)
{
printf(__FILE__ STR(__LINE__) "hello!\n");
return 0;
}
imprime
hello.c__LINE__hello!
pero cuando se utiliza esto:
#include <stdio.h>
#define STR(x) VAL(x)
#define VAL(x) #x
int main(void)
{
printf(__FILE__ STR(__LINE__) "hello!\n");
return 0;
}
imprime
hello.c7hello!
lo que es la diferencia entre
#define STR(x) #x
y
#define STR(x) VAL(x)
#define VAL(x) #x
¿Qué sucede si define VAL (X) primero? ¿Obtienes los mismos resultados? – I82Much
sí, lo mismo con definir STR (x) primero – vv1133
posible duplicado de [¿Cuál es el paso exacto de la macro expansión?] (Http://stackoverflow.com/questions/6742501/whats-the-exact-step-of-macro -expandiendo) – codaddict