C 語言字符常量中的反斜杠 \ 表示轉義序列,而非單純的字符前綴。本文詳細解析 '\8'、'\10'、'\63' 的實際含義、編譯器行為與 ASCII 碼對應關係。
printf("%d %d %d", '\8', '\10', '\63');
// 典型輸出:56 8 51 (視編譯器實現而異)
| 轉義序列 | 含義 | ASCII 十進制 | 八進制 | 十六進制 |
|---|---|---|---|---|
\a | 響鈴 (BEL) | 7 | 007 | 0x07 |
\b | 退格 (BS) | 8 | 010 | 0x08 |
\f | 換頁 (FF) | 12 | 014 | 0x0C |
\n | 換行 (LF) | 10 | 012 | 0x0A |
\r | 回車 (CR) | 13 | 015 | 0x0D |
\t | 水平制表 (HT) | 9 | 011 | 0x09 |
\v | 垂直制表 (VT) | 11 | 013 | 0x0B |
\\ | 反斜杠 \ | 92 | 134 | 0x5C |
\' | 單引號 ' | 39 | 047 | 0x27 |
\" | 雙引號 " | 34 | 042 | 0x22 |
\0 | 空字符 (NULL) | 0 | 000 | 0x00 |
\ddd | 1-3 位八進制 | - | ddd | - |
\xhh | 1-2 位十六進制 | - | - | hh |
'\8' — 非法八進制轉義8 不是合法八進制數字 (0-7)\ 忽略,視為字符 '8'」策略warning: unknown escape sequence: '\8''8' ASCII 碼 = 56'\10' — 合法八進制轉義10 = 十進制 8\b (退格/Backspace)'\63' — 合法八進制轉義63 = 6×8 + 3 = 十進制 51'3' (數字 3)| 編譯器 | '\8' 處理 | 警告等級 |
|---|---|---|
| GCC / Clang | 視為 '8' (56) | -Wunknown-escape 默認開啟 |
| MSVC | 視為 '8' (56) | C4129 (Level 1) |
嚴格標準模式 (-pedantic) | 未定義行為 | 報錯或拒絕編譯 |
'\010' 而非 '\10','\063' 而非 '\63''\x08'、'\x33' (對應 '3')-Wall -Wextra -pedantic (GCC/Clang) 或 /W4 (MSVC)'\b' 而非 '\10',用 '3' 而非 '\63''\8' 非法但被編譯器容錯為 '8'(56);'\10' 為八進制 10 = 十進制 8 (退格符);'\63' 為八進制 63 = 十進制 51 (字符 '3')。轉義序列嚴格區分八進制/十六進制,切勿混淆十進制直觀認知。養成使用標準轉義名 (\n, \t) 或固定位寬數值轉義的習慣,消除歧義。