转义序列
以下转义序列可用。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 (since C99) |
Unicode 允许范围内的值; 可能导致多个代码单元 |
代码点 U+nnnn |
\Unnnnnnnn (since C99) |
Unicode 允许范围内的值; 可能导致多个代码单元 |
代码点 U+nnnnnnnn |
通用字符名范围如果通用字符名对应的代码点不是 |
(since C99) |
[编辑] 注释
\0 是最常用的八进制转义序列,因为它表示以 null 结尾的字符串中的终止 null 字符。
换行符 \n 在文本模式 I/O 中使用时具有特殊含义:它会被转换为操作系统特定的换行字节或字节序列。
八进制转义序列的长度限制为三个八进制数字,但如果更早遇到不是有效八进制数字的字符,则会在第一个这样的字符处终止。
十六进制转义序列没有长度限制,并在第一个不是有效十六进制数字的字符处终止。如果单个十六进制转义序列表示的值不符合此字符串字面量或字符常量中使用的字符类型(char, char8_t(since C23), char16_t, char32_t(since C11), 或 wchar_t)表示的值范围,则结果是未指定的。
窄字符串字面量或 16 位字符串字面量中的通用字符名可能映射到多个代码单元,例如,\U0001f34c 在 UTF-8 中是 4 个 char 代码单元 (\xF0\x9F\x8D\x8C),在 UTF-16 中是 2 个 char16_t 代码单元 (\xD83C\xDF4C)(since C11)。 |
(since C99) |
对应于大于 |
(since C99) (until C23) |
问号转义序列 \? 用于防止三字符组在字符串字面量内被解释:诸如 "??" 这样的字符串被编译为 "\",但如果第二个问号被转义,如 "?\?/" 中所示,则它变为 "??/" |
(until 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++ 文档,关于转义序列
|