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

4

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

#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"


2
看起来它可以工作:https://ideone.com/7KMByV 你能添加一些关于编译器和操作系统的信息以便重现错误吗? - mch
你是否也收到了“错误:原始字符串定界符中的无效换行符”? - Keith Thompson
1个回答

4

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

显然,gcc支持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,则不会出现问题。


这个特性是在哪个版本的C++中引入的? - Peter Mortensen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接