Namespaces
Variants

Escape sequences

From cppreference.net

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

以下转义序列可用。如果反斜杠后跟此处未列出的任何字符,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
\x n... 任意十六进制值 码单元 n... (任意数量的十六进制数字)
通用字符名称
\u nnnn (since C99) 允许范围内的 Unicode 值;
可能产生多个码单元
码点 U+ nnnn
\U nnnnnnnn (since C99) 允许范围内的 Unicode 值;
可能产生多个码单元
码点 U+ nnnnnnnn

目录

通用字符名称范围

若通用字符名称对应的码点不是 0x24 ( '$' )、 0x40 ( '@' ) 或 0x60 ( '`' ) 且小于 0xA0 ,或是代理码点(范围 0xD800-0xDFFF ,含边界) ,或大于 0x10FFFF (即非Unicode码点) (C23起) ,则程序非良构。换言之, 基本源字符集 成员及控制字符(范围 0x0-0x1F 0x7F-0x9F )不能通过通用字符名称表示。

(C99起)

注释

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

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

八进制转义序列的长度限制为三位八进制数字,但如果遇到非有效八进制数字的字符,则会提前终止。

十六进制转义序列没有长度限制,会在遇到第一个非有效十六进制数字符时终止。若单个十六进制转义序列所表示的值超出该字符串字面量或字符常量所用字符类型( char char8_t (C23起) char16_t char32_t (C11起) wchar_t )所表示的数值范围,则结果未定义。

窄字符串字面值中的通用字符名 或16位字符串字面值 (since C11) 可能映射到多个代码单元,例如 \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)

问号转义序列 \ ? 用于防止在字符串字面值内解释 三字符组 :例如字符串 "??/" 会被编译为 " \" ,但如果第二个问号被转义,如 "? \? /" ,则会变成 "??/"

(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++ 文档 关于 转义序列