转义序列

来自cppreference.com
< c‎ | language

转义序列用于在字符串字面量字符常量中表示某些特殊字符。

下列转义序列可用。 ISO C 要求诊断是否有任何不列于此的字符后随反斜杠:

转义序列 描述 表示
\' 单引号 字节 0x27 ( ASCII 编码)
\" 双引号 字节 0x22 ( ASCII 编码)
\? 问号 字节 0x3f ( ASCII 编码)
\\ 反斜杠 字节 0x5c ( ASCII 编码)
\a 响铃 字节 0x07 ( ASCII 编码)
\b 退格 字节 0x08 ( ASCII 编码)
\f 换页 字节 0x0c ( ASCII 编码)
\n 换行 字节 0x0a ( ASCII 编码)
\r 回车 字节 0x0d ( ASCII 编码)
\t 水平制表 字节 0x09 ( ASCII 编码)
\v 垂直制表 字节 0x0b ( ASCII 编码)
\nnn 任意八进制值 字节 nnn
\xnn 任意十六进制值 字节 nn
\unnnn
(C11 起)
不在基本字符集中的 Unicode 字符。
可能生成多个字符。
编码位 U+nnnn
\Unnnnnnnn
(C11 起)
不在基本字符集中的 Unicode 字符。
可能生成多个字符。
编码位 U+nnnnnnnn

注意

八进制转义序列中 \0 最有用,因为它表示空终止字符串中的空终止字符。

换行符 \n 在用于文本模式 I/O 时有特殊含义:它被转换为 OS 限定的换行表示,通常是字节或字节序列。某些系统替而用长度域标记其文本行。

八进制转义序列拥有三个八进制位的长度限制,但若提前遇到不是合法八进制位的字符,则在首个这种字符处终止。

十六进制转义序列无长度限制,并在首个不是合法十六进制位的字符处终止。若单个十六进制转义序列所表示的值不适于此字符串字面量或字符常量中使用的字符类型( charchar16_tchar32_twchar_t ),则结果未指定。

窄字符串字面量或 16 位字符串字面量中的通用字符名可能映射到多于一个字符,例如 \U0001f34c 在 UTF-8 中是 4 个 char 编码单元( \xF0\x9F\x8D\x8C ),而在 UTF-16 中是 2 个 char16_t 编码单元( \uD83C\uDF4C )。

问号转义序列 \? 用于阻止在字符串字面量内转译三标符:如 "??/" 的字符串被编译成 "\" ,但若如在 "?\?/" 中转义第二个问号,则它变为 "??/"

示例

#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?"

引用

  • C11 standard (ISO/IEC 9899:2011):
  • 5.2.2 Character display semantics (p: 24-25)
  • 6.4.4.4 Character constants (p: 67-70)
  • C99 standard (ISO/IEC 9899:1999):
  • 5.2.2 Character display semantics (p: 19-20)
  • 6.4.4.4 Character constants (p: 59-61)
  • C89/C90 standard (ISO/IEC 9899:1990):
  • 2.2.2 Character display semantics
  • 3.1.3.4 Character constants

参阅