在两个字符串文字之间放置定义宏

时间:2017-10-16 20:54:08

标签: c macros string-literals

我知道可以将定义的宏与像这样的字符串文字连接起来

#define R "car"
const char * s1 = "foo"R; //s1="foocar"

但是当我尝试将R放在两个字符串文字之间时,就像这样

#define R "car"
const char * s1 = "foo"R"bar"; //compile-time error

我收到编译时错误error: stray 'R' in program。如何实现上述第二个例子以便s1 = "foocarbar"

1 个答案:

答案 0 :(得分:4)

C ++有一个名为“原始字符串文字”的功能,由字母R引入。

gcc显然支持C中的C ++样式的原始字符串文字作为扩展名。如果您为宏使用了R以外的名称,则不会出现此问题。

字符串文字串联不需要字符串文字相邻。而不是这个:

#define R "car"
const char * s1 = "foo"R"bar"; 

你可以写:

#define R "car"
const char * s1 = "foo" R "bar";

但是您的原始代码是有效的C,如果您使用-std=c11之类的选项使gcc更符合要求,gcc应该接受它。

请注意,如果您为宏使用R以外的名称,则不会遇到任何问题。