: C++ FAQ - Miscellaneous technical issues - [39.6] What should be done with macros that need to paste two tokens together?¿Por qué necesito doble capa de indirección para macros? En
es posible que alguien me explique por qué ? Todo lo que leo es créanme, pero simplemente no puedo confiar en algo porque alguien lo dijo.
He probado el enfoque y no puedo encontrar cualquier error que aparece:
#define mymacro(a) int a ## __LINE__
mymacro(prefix) = 5;
mymacro(__LINE__) = 5;
int test = prefix__LINE__*__LINE____LINE__; // fine
Así qué necesito para hacerlo de esta manera en su lugar (cita de la página web):
Sin embargo, necesita una doble capa de direccionamiento indirecto cuando usa ##. Básicamente es necesario crear una macro especial para "pegar token" tales como :
#define NAME2(a,b) NAME2_HIDDEN(a,b) #define NAME2_HIDDEN(a,b) a ## b
confiar en mí - que realmente necesita hacer esto! (Y por favor, nadie me escribe diciendo que a veces funciona sin la segunda capa de indirección Trate concatenación de un símbolo con __ LINE__ y ver lo que sucede a continuación..)
Editar: Podría alguien explicar también por qué se utiliza NAME2_HIDDEN
antes de su declaración a continuación? Parece más lógico definir macro NAME2_HIDDEN
antes de usarlo. ¿Es algún tipo de truco aquí?
No estoy seguro de entender lo que está pidiendo ... –
veo es un poco claro, voy a editar. – Rookie
@tenfour, hecho. ¿podría saber la respuesta a mi parte de edición? – Rookie