Escape sequences
转义序列用于在 字符串字面量 和 字符常量 中表示某些特殊字符。
以下转义序列可用。如果反斜杠后跟此处未列出的任何字符,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
|
通用字符名称范围
若通用字符名称对应的码点不是
|
(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) |
|
对应码点大于
|
(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++ 文档
关于
转义序列
|