转义序列
以下是可用的转义序列。如果反斜杠后跟随任何未在此处列出的字符,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 |
通用字符名的范围如果一个通用字符名对应的码点不是 |
(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 起) |
对应于大于 |
(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 字符常量