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

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

最佳答案

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

07-25 21:53