2011-07-28 12 views
6

cpp del GNU consente di attivare macro parametri in stringhe in questo modoCome si trasforma una macro in una stringa usando cpp?

#define STR(x) #x 

Poi, STR(hi) è sostituito con "hi"

Ma come si fa a trasformare una macro (non un parametro macro) in una stringa ?

Dire che ho una macro COSTANTE con qualche valore, ad es.

#define CONSTANT 42 

Questo non funziona: STR(CONSTANT). Questo produce "CONSTANT" che non è quello che vogliamo.

+0

Presumo si desidera che l'uscita sia "42" - Io non credo che si può senza scrivere una funzione. – Soren

risposta

14

Il trucco è definire una nuova macro che chiama STR.

#define STR(str) #str 
#define STRING(str) STR(str) 

Poi STRING(CONSTANT) cede "42" lo desideri.

+0

Credo che una e commerciale usata in questo modo venga comunemente chiamata macro operatore "stringize". –

+5

'#' non è un "e commerciale". –

10

avete bisogno di doppio riferimento indiretto magia:

#define QUOTE(x) #x 
#define STR(x) QUOTE(x) 

#define CONSTANT 42 

const char * str = STR(CONSTANT); 
+1

+1 per l'utilizzo di nomi significativi. – ArjunShankar