Использование Tornado 2.2.1 GNU
в опциях компилятора C / C ++ я пытаюсь определить строку следующим образом:
-DHELLO = «Hello», и он не работает (он также не работает для -DHELLO = \ «Hello \» и для -DHELLO = \\ «Hello \\», который работает на других платформах)
определение значения -DVALUE = 12 работает без проблем.
Кто-нибудь знает, как правильно определить строку в Торнадо?
Проблема такого макроса в том, что он обычно не является строкой (в смысле C / C ++), а просто символом препроцессора. С числами это действительно работает, потому что номер препроцессора можно использовать в C / C ++ как есть, но со строковыми символами, если вы хотите преобразовать их в строки C / C ++ (помимо добавления экранированных кавычек), вам нужно их «заштриховать».
Итак, это должно работать (без лишних кавычек):
#define _STRINGIZE(x) #x
#define STRINGIZE(x) _STRINGIZE(x)
string s = STRINGIZE(HELLO)
(Обратите внимание двойное расширение чтобы получить значение макроса в виде строки, то есть «Hello», вместо самого имени макроса, то есть «HELLO»)
Других решений пока нет …