with macro language functions define __va_args__ c macros

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"