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