Используйте строковый оператор #
, чтобы создать строку C из символа.Однако из-за причуды препроцессора вам нужно использовать два дополнительных слоя макросов:
#define FOO BAR
#define STRINGIZE(x) #x
#define STRINGIZE2(x) STRINGIZE(x)
#define FOOLITERAL @ STRINGIZE2(FOO)
// FOOLITERAL now expands to @"BAR"
Причина появления дополнительных слоев заключается в том, что оператор stringizing может использоваться только для аргументов макросане на других токенах.Во-вторых, если к аргументу макроса применяется оператор строкового преобразования в теле макроса, то этот аргумент не раскрывается как другой макрос.Таким образом, чтобы обеспечить расширение FOO
, мы переносим в другой макрос, так что когда расширяется STRINGIZE2
, он также расширяет FOO
, потому что оператор преобразования в строку не появляется в теле этого макроса.