Unrecognized escape sequences in string literals

Steven D'Aprano steven at REMOVE.THIS.cybersource.com.au
Wed Aug 12 09:36:56 CEST 2009

On Tue, 11 Aug 2009 13:20:52 -0700, Douglas Alan wrote:

> On Aug 11, 2:00 pm, Steven D'Aprano <st... at REMOVE-THIS-
> cybersource.com.au> wrote:
>> > test.cpp:1:1: warning: unknown escape sequence '\y'
>> Isn't that a warning, not a fatal error? So what does temp contain?
> My "Annotated C++ Reference Manual" is packed, and surprisingly in
> Stroustrup's Third Edition, there is no mention of the issue in the
> entire 1,000 pages. But Microsoft to the rescue:
>      If you want a backslash character to appear within a string, you
>      must type two backslashes (\\)
> (From http://msdn.microsoft.com/en-us/library/69ze775t.aspx)

Should I assume that Microsoft's C++ compiler treats it as an error, not 
a warning? Or is is this *still* undefined behaviour, and MS C++ compiler 
will happily compile "ab\cd" whatever it feels like?

> The question of what any specific C++ does if you ignore the warning is
> irrelevant, as such behavior in C++ is almost *always* undefined. Hence
> the warning.

So a C++ compiler which follows Python's behaviour would be behaving 
within the language specifications.

I note that the bash shell, which claims to follow C semantics, also does 
what Python does:

$ echo $'a s\trin\g with escapes'
a s     rin\g with escapes

Explain to me again why we're treating underspecified C++ semantics, 
which may or may not do *exactly* what Python does, as if it were the One 
True Way of treating escape sequences?


More information about the Python-list mailing list