考虑以下程序:
#include <iostream>
int main()
{
std::cout<<"Can this lead to undefined behavior?"<<'s';
}
g++给出警告:
[Warning] unknown escape sequence: 's' [enabled by default]
这里's'
误写成了'n'
。那么,这个程序是定义良好的还是未定义的?c++标准对此有何规定?K&R的C编程语言说这是C中未定义的行为。
(N3337 [lex.ccon]/3):
转义序列其中反斜杠后面的字符未在表7中列出,是有条件支持的实现定义的语义。
这意味着如果您的实现支持非标准转义序列,则它们是有效的。查看您的特定实现的文档,了解任何附加字符的语义。
否,按标准's'
是不允许的。在'
之间,你必须有一个c-characters
序列,它是escape-sequence
s, universal-character-name
s或除单引号('
),反斜杠()或换行符以外的字符。
你的编译器接受它(根据标准,如果它记录它是允许这样做的)是另一个问题,你应该查阅你的编译器文档,了解它如何解释它(或停止编写不符合标准的代码)。