使用 Tornado 2.2.1 GNU
在 C/C++ 编译器选项中,我试图将字符串定义如下: -DHELLO="Hello" 并且它不起作用(对于 -DHELLO=\"Hello\" 和 -DHELLO=\\"Hello \\" 在其他平台上工作)定义值 -DVALUE=12 可以正常工作。
有人知道在 Tornado 中定义字符串的正确方法吗?
使用 Tornado 2.2.1 GNU
在 C/C++ 编译器选项中,我试图将字符串定义如下: -DHELLO="Hello" 并且它不起作用(对于 -DHELLO=\"Hello\" 和 -DHELLO=\\"Hello \\" 在其他平台上工作)定义值 -DVALUE=12 可以正常工作。
有人知道在 Tornado 中定义字符串的正确方法吗?
这种宏的问题在于,它通常不是字符串(在 C/C++ 意义上),只是一个预处理器符号。使用数字确实有效,因为预处理器编号可以按原样在 C/C++ 中使用,但是对于字符串符号,如果要将它们转换为 C/C++ 字符串(除了添加转义引号),您需要“字符串化”它们。
所以,这应该有效(没有额外的转义引号):
#define _STRINGIZE(x) #x
#define STRINGIZE(x) _STRINGIZE(x)
string s = STRINGIZE(HELLO)
(注意双重扩展以获得宏字符串化的值,即“Hello”,而不是宏名称本身,即“HELLO”)