命名空间
变体
操作

转义序列

来自 cppreference.cn
< c‎ | 语言

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

以下是可用的转义序列。如果反斜杠后跟随任何未在此处列出的字符,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 (C99 起) Unicode 值在允许范围内;
可能产生多个码元
码点 U+nnnn
\Unnnnnnnn (C99 起) Unicode 值在允许范围内;
可能产生多个码元
码点 U+nnnnnnnn

目录

通用字符名的范围

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

(C99 起)

[编辑] 注意

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

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

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

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

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

(C99 起)

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

(C99 起)
(直至 C23)

问号转义序列 \? 用于防止三字符组在字符串字面量内部被解释:像 "??/" 这样的字符串会被编译为 "\",但如果第二个问号被转义,如 "?\?/",它就变成了 "??/"

(直至 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 字符显示语义 (p: 18-19)
  • 6.4.3 通用字符名 (p: 44)
  • 6.4.4.4 字符常量 (p: 48-50)
  • C11 标准 (ISO/IEC 9899:2011)
  • 5.2.2 字符显示语义 (p: 24-25)
  • 6.4.3 通用字符名 (p: 61)
  • 6.4.4.4 字符常量 (p: 67-70)
  • C99 标准 (ISO/IEC 9899:1999)
  • 5.2.2 字符显示语义 (p: 19-20)
  • 6.4.3 通用字符名 (p: 53)
  • 6.4.4.4 字符常量 (p: 59-61)
  • C89/C90 标准 (ISO/IEC 9899:1990)
  • 2.2.2 字符显示语义
  • 3.1.3.4 字符常量

[编辑] 参阅