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