我知道可以将定义的宏与像这样的字符串文字连接起来
#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"
?
答案 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
以外的名称,则不会遇到任何问题。