转义序列

来自cppreference.com
< 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 (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 时有特殊含义:它被转换为特定于 OS 的换行字节或字节序列。

八进制转义序列拥有三个八进制位的长度限制,但若提前遇到不是合法八进制位的字符,则在首个这种字符处终止。

十六进制转义序列无长度限制,并在首个不是合法十六进制数字的字符处终止。若单个十六进制转义序列所表示的值不适于此字符串字面量或字符常量中使用的字符类型(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/IEC 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 Character display semantics (第 18-19 页)
  • 6.4.3 Universal Character names (第 44 页)
  • 6.4.4.4 Character constants (第 48-50 页)
  • C11 标准(ISO/IEC 9899:2011):
  • 5.2.2 Character display semantics (第 24-25 页)
  • 6.4.3 Universal Character names (第 61 页)
  • 6.4.4.4 Character constants (第 67-70 页)
  • C99 标准(ISO/IEC 9899:1999):
  • 5.2.2 Character display semantics (第 19-20 页)
  • 6.4.3 Universal Character names (第 53 页)
  • 6.4.4.4 Character constants (第 59-61 页)
  • C89/C90 标准(ISO/IEC 9899:1990):
  • 2.2.2 Character display semantics
  • 3.1.3.4 Character constants

参阅