是使用未知转义序列调用c++中未定义的行为
Is the use of unknown escape sequence invokes undefined behavior in C++?
考虑以下程序:
#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或除单引号('
),反斜杠()或换行符以外的字符。
你的编译器接受它(根据标准,如果它记录它是允许这样做的)是另一个问题,你应该查阅你的编译器文档,了解它如何解释它(或停止编写不符合标准的代码)。
相关文章:
- 编译C++时未定义的引用
- vscode g++链路故障:体系结构x86_64的未定义符号
- 如何修复此错误:未定义对"距离(浮点数,浮点数,浮点数,浮点数,浮点数)"的引用
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 不知道某个东西是否被忽略会引入未定义的行为吗
- 对C宏的未定义引用,但在定义它时会出现重新定义错误
- 未定义的引用在哪里
- 编译时的 CImg 库返回对"__imp_SetDIBitsToDevice"的未定义引用
- 对Py_Initialize()的未定义引用
- c++11评估顺序(未定义的行为)
- 使用mysql c++连接器的未定义引用
- 从python调用openMP共享库时,未定义opnMP函数
- 在 Mac 上使用 CMAKE 将 FFTW 和 FFTWPP 链接到项目中时未定义的符号
- Cmake 链接问题:未定义对 Button::mousePressEvent(QGraphicsSceneMouseE
- 未定义的引用 .. 使用 OpenCV 编译 C++ 代码时,从命令行
- 具有外部"c"和程序集的未定义函数
- 此增量后语句是否会导致未定义的行为?
- 尝试调用 .h 文件中定义的变量时出现变量未定义错误
- 在C++中使用内联方法时出现未定义的符号错误
- 对 Scalar ::Scalar() 的未定义引用