2011-07-28 7 views
6

CPP GNU pozwala włączyć makro parametry do strun jak takJak zmienić makro w ciąg znaków przy użyciu cpp?

#define STR(x) #x 

Następnie STR(hi) jest podstawiony "hi"

Ale w jaki sposób włączyć makra (nie makro parametr) na sznurku ?

Powiedz, że mam makro CONSTANT z pewną wartością np.

#define CONSTANT 42 

To nie działa: STR(CONSTANT). To daje "CONSTANT", czego nie chcemy.

+0

Zakładam, że chcesz być wyjście do „42” - nie sądzę, można bez pisania funkcję. – Soren

Odpowiedz

14

Sztuką jest zdefiniowanie nowego makra, które wywołuje STR.

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

Następnie STRING(CONSTANT) daje "42" to pożądane.

+0

Wierzę, że używane w ten sposób urządzenie typu ampersand jest powszechnie nazywane operatorem macro "stringize". –

+5

'#' nie jest "znakiem ampersand". –

10

Trzeba podwójnego zadnie Magic:

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

#define CONSTANT 42 

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

+1 za używanie znaczących nazw. – ArjunShankar