1

为什么是以下程序的输出:

str                 str

而不是这个:

str str

这是程序:

#include <iostream>

int main()
{
   std::cout << "str \
                str \n";
}

我尝试了 gcc 4.7.2 和 MSVC-11.0。

4

3 回答 3

9

因为\在换行符之前表示行继续。* 所以你的两条线实际上是拼接在一起的,包括所有的空格。

你可以试试这个:

std::cout << "str "
                "str \n";

因为相邻的字符串文字是连接的。


* 来自 C99,第 5.1.1.2 节:

每个反斜杠字符 ( \) 的实例后面紧跟一个换行符都被删除,拼接物理源代码行以形成逻辑源代码行。

于 2013-01-09T17:05:56.593 回答
4

反斜杠被预处理器替换,规则如下:每个\后跟换行符的序列都被删除。

C11 (n1570), § 5.1.1.2 翻译阶段
每个反斜杠字符 ( \) 的实例都被删除,紧跟一个换行符,将物理源代码行拼接成逻辑源代码行。

一个常见的解决方案是使用相邻的字符串字面量连接。

std::cout << "str"
             "str\n";

C11 (n1570), § 5.1.1.2 翻译阶段
相邻的字符串文字标记被连接。

于 2013-01-09T17:06:15.010 回答
3

换行符前的反斜杠表示字符串在下一行继续。下一行的前面有许多空白字符。

尝试:

std::cout << "str " 
                "str \n";
于 2013-01-09T17:07:01.130 回答