我知道可以将定义好的宏与这样的字符串文字连接起来
#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
以外的名称,就不会有问题。