在编译器选项中定义字符串

时间:2016-12-19 20:07:29

标签: c++ vxworks wind-river-workbench

使用Tornado 2.2.1 GNU

在C / C ++编译器选项中我尝试将字符串定义如下: -DHELLO ="你好"并且它不起作用(对于-DHELLO = \" Hello \"以及-DHELLO = \\" Hello \\"它在其他平台中有效也失败了) 定义值-DVALUE = 12无问题地工作。

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

1 个答案:

答案 0 :(得分:1)

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

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

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

string s = STRINGIZE(HELLO)

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