-
www说
好吧。最简单的方法是使用以下事实:相邻字符串文字由编译器连接:const char *text = "This text is pretty long, but will be " "concatenated into just a single string. " "The disadvantage is that you have to quote " "each part, and newlines must be literal as " "usual.";缩进并不重要,因为它不在引号内。只要您注意避开嵌入式换行符,也可以执行此操作。失败,就像我的第一个答案一样,将不会编译:const char * text2 = “另一方面,我疯了\并真正让文字跨越几行,不用麻烦引用每一行的\内容。这可行,但是您不能缩进。”同样,请注意每行末尾的那些反斜杠,它们必须紧接在行末之前,它们在源代码中转义了换行符,以便所有内容都好像换行符不在那里。在反斜杠的位置,字符串中不会出现换行符。使用这种形式,您显然无法缩进文本,因为缩进将随后成为字符串的一部分,并在字符串中添加随机空格。
-
暮色呼如
在C ++ 11中,您具有原始字符串文字。shell和脚本语言(例如Python,Perl和Ruby)中的此处文本有点类似。const char * vogon_poem = R"V0G0N( O freddled gruntbuggly thy micturations are to me As plured gabbleblochits on a lurgid bee. Groop, I implore thee my foonting turlingdromes. And hooptiously drangle me with crinkly bindlewurdles,Or I will rend thee in the gobberwarts with my blurlecruncheon, see if I don't. (by Prostetnic Vogon Jeltz; see p. 56/57))V0G0N";字符串中的所有空格和缩进以及换行符都将保留。它们也可以是utf-8 | 16 | 32或wchar_t(具有通常的前缀)。我应该指出,这里实际上不需要转义序列V0G0N。它的存在将允许在字符串中放入)“。换句话说,我可以将 "(by Prostetnic Vogon Jeltz; see p. 56/57)"(请注意额外的引号),并且上面的字符串仍然正确。否则我也可以使用const char * vogon_poem = R"( ... )";仍然需要引号内的括号。
-
qq_遁去的一_1
输入多行字符串的一种可能方便的方法是使用宏。仅当引号和括号之间是平衡的并且不包含“顶级”逗号时,此方法才有效:#define MULTI_LINE_STRING(a) #aconst char *text = MULTI_LINE_STRING( Using this trick(,) you don't need to use quotes. Though newlines and multiple white spaces will be replaced by a single whitespace.);printf("[[%s]]\n",text);与gcc 4.6或g ++ 4.6一起编译,会产生: [[Using this trick(,) you don't need to use quotes. Though newlines and multiple white spaces will be replaced by a single whitespace.]]请注意,,除非在括号或引号中包含,否则不能在字符串中。单引号是可能的,但是会产生编译器警告。编辑:如评论中所述,#define MULTI_LINE_STRING(...) #__VA_ARGS__允许使用,。