language - ¿Qué significa#x dentro de una macro C?
define max en c (3)
"#" puede mostrar el nombre de una variable, es mejor definir la macro ya que:
#define PRINT(i) printf(#i "= %d/n", i)
y úsalo así:
int i = 5;
PRINT(i);
Resultado mostrado:
i = 5
Por ejemplo, tengo una macro:
#define PRINT(int) printf(#int "%d/n",int)
Yo sé un poco cuál es el resultado. Pero ¿cómo es posible que #int vuelva a aplicar todo?
Me olvido un poco de este detalle. ¿Alguien puede darme una pista amable?
¡Gracias!
En este contexto (aplicado a una referencia de parámetro en una definición de macro), el signo de libra significa expandir este parámetro al texto literal del argumento que se pasó a la macro.
En este caso, si llama a PRINT(5)
la macro expansión será printf("5" "%d/n", 5);
que se imprimirá 5 5
; no muy útil sin embargo, si llama a PRINT(5+5)
la macro expansión será printf("5+5" "%d/n", 5+5);
que imprimirá 5+5 10
, un poco menos trivial.
Este mismo ejemplo se explica en este tutorial sobre el preprocesador C (que, dicho sea de paso, es el primer hit de Google para el signo macro de c macro ).
Esa es una mala elección de nombre para el parámetro macro, pero inofensivo (gracias a Dreamlax).
Básicamente si escribo así
PRINT(5);
Será reemplazado como
printf("5" "%d/n",5);
o
printf("5 %d/n",5);
Es un proceso llamado Stringification , #int se reemplaza con una cadena que consiste en su contenido, 5 -> "5"