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