2017-10-16 34 views
4

我知道这是可能来连接一个定义的宏用于字符串像这样配售定义两个字符串文字

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

但与宏时,我尝试把这样

#define R "car" 
const char * s1 = "foo"R"bar"; //compile-time error 
两个字符串值之间 R

我得到一个编译时错误error: stray 'R' in program。上面的第二个例子如何能够实现s1 = "foocarbar"

+2

它似乎工作:https://ideone.com/7KMByV你可以添加一些关于编译器和操作系统的信息来重现错误? – mch

+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以外的名称,则不会有问题。