Как мне превратить макрос в строку с помощью cpp? - PullRequest
6 голосов
/ 28 июля 2011

cpp GNU позволяет вам превращать макро параметры в строки, подобные

#define STR(x) #x

Затем STR(hi) заменяется на "hi"

Но как превратить макрос (не параметр макроса) в строку?

Скажем, у меня есть макрос CONSTANT с некоторым значением, например

#define CONSTANT 42

Это не работает: STR(CONSTANT). Это дает "CONSTANT", что не то, что мы хотим.

Ответы [ 2 ]

14 голосов
/ 28 июля 2011

Хитрость в том, чтобы определить новый макрос, который вызывает STR.

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

Затем STRING(CONSTANT) дает "42", как требуется.

10 голосов
/ 28 июля 2011

Вам нужна двойная магия косвенного обращения:

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

#define CONSTANT 42

const char * str = STR(CONSTANT);
...