2012-06-23 7 views
7

Necesito una macro que ayuda a dar salida al nombre y valor del parámetro dado. Es algo así como el siguiente código.Cómo lograr esta función en C/C++

#define AA "Hello" 
#define BB "World" 
#define PRINT(input_param) printf("input_param: %s\n", (input_param)) 
void main() 
{ 
    PRINT(AA); 
    PRINT(BB); 
} 

Estoy esperando el resultado: AA: Hello\n BB: World\n

Pero, obviamente, no lo es. ¿Alguien puede corregirme? Gracias.

+1

Por qué "pero, obviamente, no es" .. ¿Qué pasa cuando se ejecuta este? – Levon

+0

@Levon "input_param: Hello \ ninput_param: World \ n" –

+0

@ R.MartinhoFernandes Gracias por la información. – Levon

Respuesta

12

Debe escribir el nombre de macro con #. Así es como funciona assert() así:

#define AA "Hello" 
#define BB "World" 
#define PRINT(input_param) printf(#input_param ": %s\n", (input_param)) 
void main() 
{ 
    PRINT(AA); 
    PRINT(BB); 
} 

puede ser más clara si escribía así:

#define PRINT(input_param) printf("%s: %s\n", #input_param, (input_param)) 
+0

¡Fantástico! ¡Muchas gracias! –

+1

El segundo también protege contra desastres como 'PRINT (bar% foo)'. – Dave

+0

No es que duela, pero no necesita paréntesis alrededor de los parámetros macro pasados ​​como argumentos (ya que no pueden contener comas). –