0

使用 Tornado 2.2.1 GNU

在 C/C++ 编译器选项中,我试图将字符串定义如下: -DHELLO="Hello" 并且它不起作用(对于 -DHELLO=\"Hello\" 和 -DHELLO=\\"Hello \\" 在其他平台上工作)定义值 -DVALUE=12 可以正常工作。

有人知道在 Tornado 中定义字符串的正确方法吗?

4

1 回答 1

3

这种宏的问题在于,它通常不是字符串(在 C/C++ 意义上),只是一个预处理器符号。使用数字确实有效,因为预处理器编号可以按原样在 C/C++ 中使用,但是对于字符串符号,如果要将它们转换为 C/C++ 字符串(除了添加转义引号),您需要“字符串化”它们。

所以,这应该有效(没有额外的转义引号):

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

string s = STRINGIZE(HELLO)

(注意双重扩展以获得宏字符串化的,即“Hello”,而不是宏名称本身,即“HELLO”)

于 2016-12-19T21:23:42.057 回答