2012-06-23 10 views
7

Ho bisogno di una macro che aiuti a generare il nome e il valore del parametro dato. È qualcosa come il seguente codice.Come eseguire questa funzione in 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); 
} 

mi aspetto il risultato: AA: Hello\n BB: World\n

Ma ovviamente non lo è. Chiunque può correggermi? Grazie.

+1

Perché "ma, ovviamente, non è" .. Cosa succede quando si esegue questo? – Levon

+0

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

+0

@ R.MartinhoFernandes Grazie per le informazioni. – Levon

risposta

12

È necessario stringificare il nome della macro con #. Questo è il modo assert() funziona così:

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

può essere più chiaro se l'ho scritto in questo modo:

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

Fantastico! Molte grazie! –

+1

Il secondo inoltre protegge da disastri come "PRINT (bar% pippo)". – Dave

+0

Non che faccia male, ma non hai bisogno di paren intorno ai parametri macro passati come argomenti (dato che non possono contenere virgole). –

Problemi correlati