| 差異點 | Windows | POSIX (Linux/Unix/macOS) | 應對策略 |
|---|---|---|---|
| 目錄分隔符 | \ | / | 統一用正斜線 / (Win API 亦支援) |
| 大小寫敏感度 | 不敏感 (保留大小寫) | 敏感 | 命名僅用字母數字;避免同目錄大小僅大小寫不同檔名 |
| 保留檔名 | AUX, CON, NUL, PRN, COM1..LPT9 | 無 | 禁止使用保留字命名 |
| 路徑禁用字元 | < > : " | ? * | / \0 | 輸入驗證過濾 |
最佳實務:使用 boost::filesystem (C++17 std::filesystem) 抽象平台差異。
CRLF (\r\n)LF (\n)CR (\r)版控工具 (Git/SVN) 通常自動處理。程式讀寫時注意 std::ios::binary vs 文字模式差異;跨平台傳輸需統一轉換。
PATH/LD_LIBRARY_PATH/RPATH。應用啟動子進程或載入插件時,明確指定完整路徑 或正確設定環境變數。
SetEnvironmentVariable/setenv),勿修改系統級,避免影響同機其他軟體。extern "C"),避免 C++ 名稱修飾、ABI、STL 版本衝突。dlopen 時慎用 RTLD_GLOBAL:全域符號表易導致多動態庫符號衝突,產生極難除錯的執行期錯誤。libfoo.so.1.2.3 + soname 機制。後台模組常需以服務/守護進程運行。抽象通用服務外殼 (Windows Service / systemd / launchd),業務邏輯編譯為動態庫掛載。外殼代碼平台相關但業務無關,可重用;業務邏輯單一代碼庫,跨平台編譯。
| 平台 | 預設堆疊 | 調整方式 |
|---|---|---|
| Linux x86_64 | 8 MB | pthread_attr_setstacksize / ulimit -s |
| Windows | 1 MB | 連結器 /STACK / CreateThread 參數 |
| 嵌入式 (Symbian) | 12 KB | 編譯器選項 / 重構避免大區域陣列 |