转义序列
下列转义序列可用。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 时有特殊含义:它被转换为特定于 OS 的换行字节或字节序列。
八进制转义序列拥有三个八进制位的长度限制,但若提前遇到不是合法八进制位的字符,则在首个这种字符处终止。
十六进制转义序列无长度限制,并在首个不是合法十六进制数字的字符处终止。若单个十六进制转义序列所表示的值不适于此字符串字面量或字符常量中使用的字符类型(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 Character display semantics (第 18-19 页)
- 6.4.3 Universal Character names (第 44 页)
- 6.4.4.4 Character constants (第 48-50 页)
- C11 标准(ISO/IEC 9899:2011):
- 5.2.2 Character display semantics (第 24-25 页)
- 6.4.3 Universal Character names (第 61 页)
- 6.4.4.4 Character constants (第 67-70 页)
- C99 标准(ISO/IEC 9899:1999):
- 5.2.2 Character display semantics (第 19-20 页)
- 6.4.3 Universal Character names (第 53 页)
- 6.4.4.4 Character constants (第 59-61 页)
- C89/C90 标准(ISO/IEC 9899:1990):
- 2.2.2 Character display semantics
- 3.1.3.4 Character constants
参阅
转义序列的 C++ 文档 |