Определить строку в опциях компилятора

Использование 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")

Другие вопросы по тегам