首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C語言字符集深度解析:三字母詞、轉義序列與跨平台差異

     編輯:關於C語言

C語言字符集深度解析:三字母詞、轉義序列與跨平台差異

三字母詞

早期為解決鍵盤/字符集缺少特定字符 (如 []{}|^#\~) 而設計,由 ?? 開頭的三字符序列表示:

三字母詞代表字符
??([
??)]
??!|
??<{
??>}
??'^
??=#
??/\
??-~

現狀:現代編譯器 (GCC 4.4+、MSVC、Clang) 默認禁用三字母詞 (需 -trigraphs 啟用),因其極易導致誤觸發 (如 "What??!" 變 "What|")。

轉義序列完整表

可見字符轉義

序列含義用途
\?問號防止連續 ??? 被誤識為三字母詞
\"雙引號字符串字面量內包含雙引號
\'單引號字符常量內包含單引號 '\''
\\反斜槓字符串/字符常量內表示單個反斜槓

不可見控制字符

序列名稱ASCII 碼效果
\a響鈴0x07終端發出聲響/視覺提示
\b退格0x08光標左移一格 (不刪除字符)
\f換頁0x0C打印機換頁/終端清屏
\n換行0x0A光標移至下行行首 (Unix 行尾標誌)
\r回車0x0D光標移至本行行首 (Mac OS 9 前行尾標誌)
\t水平制表0x09光標跳至下一制表位 (通常 8 的倍數列)
\v垂直制表0x0B打印機垂直跳頁/終端少用

數值轉義

  • \ddd:1~3 位八進制數 (如 \101 = 'A')。
  • \xhh:1~2 位十六進制數 (如 \x41 = 'A')。注意:\x 後盡可能多讀取十六進制數字,建議用 "" 分隔:"\x41""BC" 避免歧義。

跨平台關鍵差異

特性Linux/Unix/macOSWindows
文本文件行尾\n (LF, 0x0A)\r\n (CRLF, 0x0D 0x0A)
C 標準庫處理無轉換文本模式 fopen(..., "r") 讀取時自動將 \r\n → \n,寫入時 \n → \r\n
\n 輸出效果換行並歸位僅換行 (需 \r\n 才換行歸位),控制台常自動處理
三字母詞默認GCC 4.4+ 禁用MSVC 禁用

實戰建議

  • 文件處理:跨平台文本文件統一用 \n,二進制模式 "rb"/"wb" 禁用轉換。
  • 網絡協議:HTTP 頭部強制 \r\n,發送前手動拼接。
  • 字符串拼接:"Path: " __FILE__ "\n" 利用編譯器相鄰字符串字面量自動連接特性。
  • 避免在代碼中硬編碼路徑分隔符,用宏或運行時檢測:#ifdef _WIN32 #define SEP '\\' #else #define SEP '/' #endif。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved