From ce6baa77fe0fb53166f91d38e5187618af9b164c Mon Sep 17 00:00:00 2001 From: Tobias Bucher Date: Wed, 6 Jan 2016 00:01:59 +0100 Subject: [PATCH] Clarify how Rust treats backslashes at end of line in string literals Rust differs in that behavior from C: In C, the newline escapes are resolved before anything else, and in Rust this depends on whether the backslash is escaped itself. A difference can be observed in the following two programs: ```c #include int main() { printf("\\ n\n"); return 0; } ``` ```rust fn main() { println!("\\ n"); } ``` The first program prints two newlines, the second one prints a backslash, a newline, the latin character n and a final newline. --- src/doc/reference.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/doc/reference.md b/src/doc/reference.md index e7cc1436824..5f71ee44379 100644 --- a/src/doc/reference.md +++ b/src/doc/reference.md @@ -208,10 +208,10 @@ A _string literal_ is a sequence of any Unicode characters enclosed within two which must be _escaped_ by a preceding `U+005C` character (`\`). Line-break characters are allowed in string literals. Normally they represent -themselves (i.e. no translation), but as a special exception, when a `U+005C` -character (`\`) occurs immediately before the newline, the `U+005C` character, -the newline, and all whitespace at the beginning of the next line are ignored. -Thus `a` and `b` are equal: +themselves (i.e. no translation), but as a special exception, when an unescaped +`U+005C` character (`\`) occurs immediately before the newline (`U+000A`), the +`U+005C` character, the newline, and all whitespace at the beginning of the +next line are ignored. Thus `a` and `b` are equal: ```rust let a = "foobar";