2016-12-19 17 views
0

Использование Tornado 2.2.1 GNUопределить строку в опциях компилятора

в опции/C++ компилятор C Я пытаюсь определить строку следующим образом: -DHELLO = «Hello», и это не работает (он также не удалось для -DHELLO = \ "Hello \" и для -DHELLO = \\ "Hello \\", который работает на других платформах) define value -DVALUE = 12 работает без проблем.

Кто-нибудь знает, как правильно определить строку в Торнадо?

+0

Вы пробовали '-DHELLO =" \ "hello \" "' – Amadeus

+0

@Amadeus: Разве вы не имеете в виду '-DHELLO =" \ "hello \" "'? (Другими словами, избегайте внутренних котировок) –

+0

Это .. «не работает»? Что это значит? –

ответ

0

Проблема с таким макросом заключается в том, что она обычно не является строкой (в смысле C/C++), просто символом препроцессора. С номерами он действительно работает, потому что число препроцессоров может использоваться в C/C++ как есть, но со строковыми символами, если вы хотите преобразовать их в строки C/C++ (помимо добавления экранированных кавычек), вам нужно «подстроить» их.

Таким образом, это должно работать (без дополнительной спасся цитаты):

#define _STRINGIZE(x) #x 
#define STRINGIZE(x) _STRINGIZE(x) 

string s = STRINGIZE(HELLO) 

(обратите внимание на двойное расширение, чтобы получить значение макроса stringized, т.е. «Hello», вместо макроса само название, т. е. «HELLO»)