是使用未知转义序列调用c++中未定义的行为

Is the use of unknown escape sequence invokes undefined behavior in C++?

本文关键字:未定义 c++ 调用 未知 转义序列      更新时间:2023-10-16

考虑以下程序:

#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或除单引号('),反斜杠()或换行符以外的字符。

你的编译器接受它(根据标准,如果它记录它是允许这样做的)是另一个问题,你应该查阅你的编译器文档,了解它如何解释它(或停止编写不符合标准的代码)。