命名空间
变体
操作

转义序列

来自 cppreference.com
< 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 中使用时具有特殊含义:它将被转换为特定于操作系统的换行字节或字节序列。

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

十六进制转义序列没有长度限制,并在遇到第一个非有效十六进制数字的字符处终止。如果单个十六进制转义序列表示的值不适合此字符串字面量或字符常量 (char, char8_t(自 C23), char16_t, char32_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 字符常量

[编辑] 另请参见

C++ 文档 转义序列