使用未知的转义序列是否在C ++中调用未定义的行为?

时间:2015-08-28 09:52:28

标签: c++ special-characters undefined-behavior

考虑以下计划:

#include <iostream>
int main()
{
     std::cout<<"Can this lead to undefined behavior?"<<'\s';
}

g ++发出警告:

[Warning] unknown escape sequence: '\s' [enabled by default]

此处'\s'意外输入'\n'而不是res.sendFile(path.join(__dirname+'\\showPlayers.html')); 。那么,这个程序定义得好还是未定义? C ++标准对此有何看法? K&amp; R的C编程语言表示它在C中是未定义的行为。

2 个答案:

答案 0 :(得分:4)

  

(N3337 [lex.ccon]/3):转义序列   其中表7中未列出反斜杠后面的字符是有条件支持的   实现定义的语义。

这意味着如果您的实现支持非标准转义序列,则它们是有效的。有关任何其他字符的语义,请查看特定实现的文档。

答案 1 :(得分:0)

不,按照标准,'\s'是不允许的。在' es之间,您必须拥有一系列c-characters escape-sequence s,universal-character-name s或单引号('以外的字符),反斜杠(\)或换行符。

您的编译器接受它(根据标准,如果它记录它可以执行)是另一个问题,您应该查阅编译器文档以获取有关它如何解释它的信息(或者停止编写非 - 符合代码)。