命名空间
变体
操作

转义序列

来自 cppreference.cn
< c‎ | language

转义序列用于表示字符串字面量字符常量中的某些特殊字符。

以下转义序列可用。ISO C 要求,如果反斜杠后跟的字符未在此处列出,则发出诊断信息

转义
序列
描述 表示
简单转义序列
\' 单引号 ASCII 编码中的字节 0x27
\" 双引号 ASCII 编码中的字节 0x22
\? 问号 ASCII 编码中的字节 0x3f
\\ 反斜杠 ASCII 编码中的字节 0x5c
\a 响铃 ASCII 编码中的字节 0x07
\b 退格 ASCII 编码中的字节 0x08
\f 换页 - 新页 ASCII 编码中的字节 0x0c
\n 换行 - 新行 ASCII 编码中的字节 0x0a
\r 回车 ASCII 编码中的字节 0x0d
\t 水平制表符 ASCII 编码中的字节 0x09
\v 垂直制表符 ASCII 编码中的字节 0x0b
数值转义序列
\nnn 任意八进制值 代码单元 nnn
\xn... 任意十六进制值 代码单元 n... (任意数量的十六进制数字)
通用字符名
\unnnn (since C99) Unicode 允许范围内的值;
可能导致多个代码单元
代码点 U+nnnn
\Unnnnnnnn (since C99) Unicode 允许范围内的值;
可能导致多个代码单元
代码点 U+nnnnnnnn

目录

通用字符名范围

如果通用字符名对应的代码点不是 0x24 ('$'), 0x40 ('@'), 或 0x60 ('`') 且小于 0xA0,或者是一个代理代码点(范围 0xD800-0xDFFF,包含在内),或者大于 0x10FFFF,即不是 Unicode 代码点(since C23),则程序是非良构的。换句话说,基本源字符集和控制字符(在范围 0x0-0x1F0x7F-0x9F 内)的成员不能用通用字符名表示。

(since C99)

[编辑] 注释

\0 是最常用的八进制转义序列,因为它表示以 null 结尾的字符串中的终止 null 字符。

换行符 \n文本模式 I/O 中使用时具有特殊含义:它会被转换为操作系统特定的换行字节或字节序列。

八进制转义序列的长度限制为三个八进制数字,但如果更早遇到不是有效八进制数字的字符,则会在第一个这样的字符处终止。

十六进制转义序列没有长度限制,并在第一个不是有效十六进制数字的字符处终止。如果单个十六进制转义序列表示的值不符合此字符串字面量或字符常量中使用的字符类型(char, char8_t(since C23), char16_t, char32_t(since C11), 或 wchar_t)表示的值范围,则结果是未指定的。

窄字符串字面量或 16 位字符串字面量中的通用字符名可能映射到多个代码单元,例如,\U0001f34c 在 UTF-8 中是 4 个 char 代码单元 (\xF0\x9F\x8D\x8C),在 UTF-16 中是 2 个 char16_t 代码单元 (\xD83C\xDF4C)(since C11)

(since C99)

对应于大于 0x10FFFF 的代码指针(在 ISO/ISC 10646 中未定义)的通用字符名可以在字符常量字符串字面量中使用。C++20 中不允许这种用法。

(since C99)
(until C23)

问号转义序列 \? 用于防止三字符组在字符串字面量内被解释:诸如 "??" 这样的字符串被编译为 "\",但如果第二个问号被转义,如 "?\?/" 中所示,则它变为 "??/"

(until C23)

[编辑] 示例

#include <stdio.h>
 
int main(void)
{
    printf("This\nis\na\ntest\n\nShe said, \"How are you?\"\n");
}

输出

This
is
a
test
 
She said, "How are you?"

[编辑] 参考

  • C17 标准 (ISO/IEC 9899:2018)
  • 5.2.2 字符显示语义(页码:18-19)
  • 6.4.3 通用字符名(页码:44)
  • 6.4.4.4 字符常量(页码:48-50)
  • C11 标准 (ISO/IEC 9899:2011)
  • 5.2.2 字符显示语义(页码:24-25)
  • 6.4.3 通用字符名(页码:61)
  • 6.4.4.4 字符常量(页码:67-70)
  • C99 标准 (ISO/IEC 9899:1999)
  • 5.2.2 字符显示语义(页码:19-20)
  • 6.4.3 通用字符名(页码:53)
  • 6.4.4.4 字符常量(页码:59-61)
  • C89/C90 标准 (ISO/IEC 9899:1990)
  • 2.2.2 字符显示语义
  • 3.1.3.4 字符常量

[编辑] 参见

C++ 文档,关于转义序列