問題背景
程式碼中出現 void far line(),詢問 far 含義。
歷史背景
far、near、huge 是 16 位元 DOS 時代(Turbo C、Borland C、Microsoft C 5.1/6.0)針對分段記憶體架構的非標準關鍵字:
- near 指標:16 位元,僅存偏移量,預設資料段 (DS) 或程式碼段 (CS),可寻址 64KB。
- far 指標:32 位元 (段:偏移),完整段地址+偏移,可寻址 1MB 實模式記憶體。
- huge 指標:同 far,但支援跨段運算(巨大陣列)。
現代環境
- 32/64 位元保護模式作業系統(Windows、Linux、macOS)採用平坦記憶體模型,不再需要 far/near。
- 現代編譯器(GCC、Clang、MSVC 14+)忽略或報錯 此關鍵字,除非啟用特定相容模式。
- 嵌入式 16 位元單晶片(如 8051、MSP430 部分模式)可能仍使用類似擴充。
程式碼遷移建議
// 舊代碼
void far line();
// 現代標準 C
void line(); // 直接移除 far
若維護古老 DOS 程式碼,請參考原編譯器文件;新專案完全不用 此關鍵字。