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

C++ 跨平台開發實戰 (五):作業系統層面差異與應對策略

     編輯:關於C++

檔案系統 (FileSystem) 差異

差異點WindowsPOSIX (Linux/Unix/macOS)應對策略
目錄分隔符\/統一用正斜線 / (Win API 亦支援)
大小寫敏感度不敏感 (保留大小寫)敏感命名僅用字母數字;避免同目錄大小僅大小寫不同檔名
保留檔名AUX, CON, NUL, PRN, COM1..LPT9無禁止使用保留字命名
路徑禁用字元< > : " | ? */ \0輸入驗證過濾

最佳實務:使用 boost::filesystem (C++17 std::filesystem) 抽象平台差異。

文字檔換行符

  • Windows: CRLF (\r\n)
  • Linux/Unix: LF (\n)
  • macOS (舊): CR (\r)

版控工具 (Git/SVN) 通常自動處理。程式讀寫時注意 std::ios::binary vs 文字模式差異;跨平台傳輸需統一轉換。

檔案搜尋路徑

  • Windows: 載入 DLL/執行檔優先搜尋當前目錄。
  • POSIX: 不搜尋當前目錄 (安全性),依賴 PATH/LD_LIBRARY_PATH/RPATH。

應用啟動子進程或載入插件時,明確指定完整路徑 或正確設定環境變數。

環境變數修改原則

  • 僅修改進程級環境變數 (SetEnvironmentVariable/setenv),勿修改系統級,避免影響同機其他軟體。

動態庫開發鐵律

  1. 導出 C 風格介面 (extern "C"),避免 C++ 名稱修飾、ABI、STL 版本衝突。
  2. POSIX dlopen 時慎用 RTLD_GLOBAL:全域符號表易導致多動態庫符號衝突,產生極難除錯的執行期錯誤。
  3. 版本管理:libfoo.so.1.2.3 + soname 機制。

服務/守護進程架構

後台模組常需以服務/守護進程運行。抽象通用服務外殼 (Windows Service / systemd / launchd),業務邏輯編譯為動態庫掛載。外殼代碼平台相關但業務無關,可重用;業務邏輯單一代碼庫,跨平台編譯。

預設堆疊大小

鐵律:堆疊上絕不定義大型陣列/物件。大物件用 new/std::vector/std::unique_ptr 放堆積。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
平台預設堆疊調整方式
Linux x86_648 MBpthread_attr_setstacksize / ulimit -s
Windows1 MB連結器 /STACK / CreateThread 參數
嵌入式 (Symbian)12 KB編譯器選項 / 重構避免大區域陣列