名稱空間
變體
操作

轉義序列

來自 cppreference.com
< c‎ | 語言

轉義序列用於在字串字面量字元常量中表示某些特殊字元。

以下是可用的轉義序列。如果反斜槓後跟隨任何未在此處列出的字元,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

目錄

通用字元名的範圍

如果一個通用字元名對應的碼點不是 0x24 ('$')、0x40 ('@') 或 0x60 ('`') 且小於 0xA0,或者是代理碼點(範圍 0xD800-0xDFFF,包含邊界),或者大於 0x10FFFF,即不是一個 Unicode 碼點(C23 起),那麼程式是病構的。換句話說,基本源字元集的成員和控制字元(在 0x0-0x1F0x7F-0x9F 範圍內)不能用通用字元名錶示。

(C99 起)

[編輯] 注意

\0 是最常用的八進位制轉義序列,因為它表示以空字元結尾的字串中的終止空字元。

換行符 \n文字模式 I/O 中使用時有特殊含義:它會被轉換成作業系統特定的換行位元組或位元組序列。

八進位制轉義序列的長度限制為三個八進位制數字,但如果提前遇到第一個不是有效八進位制數字的字元,則會在此處終止。

十六進位制轉義序列沒有長度限制,並在第一個不是有效十六進位制數字的字元處終止。如果單個十六進位制轉義序列表示的值不適合此字串字面量或字元常量中使用的字元型別(charchar8_t(C23 起)char16_tchar32_t(C11 起)wchar_t)所能表示的值範圍,則結果是未指定的。

窄字串字面量或 16 位字串字面量(C11 起)中的通用字元名可能對映到多個碼元,例如 \U0001f34c 在 UTF-8 中是 4 個 char 碼元(\xF0\x9F\x8D\x8C,在 UTF-16 中是 2 個 char16_t 碼元(\xD83C\xDF4C(C11 起)

(C99 起)

對應於大於 0x10FFFF 的碼點(在 ISO/ISC 10646 中未定義)的通用字元名可以在字元常量字串字面量中使用。在 C++20 中不允許這種用法。

(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 字元常量

[編輯] 參閱