使用說明
本表整理自 VC6 `cl.exe /?` 與 `link.exe /?`,分類對應專案屬性頁 (Project → Settings → C/C++ / Link)。粗體 為常用/關鍵選項。參數後加 `-` 表示停用 (如 `/Oy-`)。
一、優化選項 (/O)
| 選項 | 說明 | 備註 |
| /O1 | 最小化程式碼體積 | 等同 /Os /Og /Oy /Ob1 /GF /Gy |
| /O2 | 最大化執行速度 | 等同 /Ot /Og /Oi /Oy /Ob2 /GF /Gy |
| /Os | 偏好程式碼體積 | |
| /Ot | 偏好執行速度 | |
| /Oa | 假設無別名 (激進優化) | 可能破壞指標別名代碼 |
| /Ow | 假設跨函式別名 | 保守優化 |
| /Od | 停用優化 (Debug 預設) | 保留完整除錯資訊 |
| /Ox | 最大優化組合 (舊版) | 建議用 /O2 |
| /Og | 啟用全域優化 | |
| /Oy[-] | 省略幀指標 (EBP) | Release 預設開啟,Debug 需關閉 |
| /Oi | 啟用內建函式 (memcpy 等) | 以指令取代呼叫 |
| /Op[-] | 浮點一致性優化 | /Za 暗含啟用 |
二、代碼生成 (/G)
| 選項 | 說明 | 備註 |
| /G3~G6 | 針對 386/486/Pentium/Pro 優化 | 已過時,建議 /arch:SSE2 等 |
| /GR[-] | 啟用 RTTI (dynamic_cast, typeid) | MFC 專案通常需開啟 |
| /GX[-] | 同步 C++ 例外處理 | 等同 /EHsc,Release 建議開啟 |
| /EHs | 同步例外處理 | C++ 標準 |
| /EHa | 非同步例外處理 (SEH) | 效能較差,含硬體例外 |
| /EHc | extern "C" 預設 nothrow | |
| /Gd | __cdecl 呼叫慣例 (C 預設) | 呼叫者清堆疊 |
| /Gr | __fastcall 呼叫慣例 | 前兩參數用暫存器 |
| /Gz | __stdcall 呼叫慣例 (WinAPI) | 被呼叫者清堆疊 |
| /GA | Windows 應用程式優化 | |
| /GB | 混合模型優化 (預設) | |
| /GD | Windows DLL 優化 | |
| /Gf | 啟用字串池 (唯讀合併) | 舊選項 |
| /GF | 啟用唯讀字串池 | 節省空間,字串常數共享 |
| /Gy | 函式級連結 (COMDAT) | 配合 /OPT:REF 移除未用函式 |
| /GZ | 執行期偵錯檢查 (Debug) | 堆疊/變數初始化檢查 |
| /Gh | 啟用 _penter 鉤子函式 | 效能分析用 |
| /Ge | 強制所有函式堆疊檢查 | |
| /Gs[num] | 停用堆疊檢查 / 設閾值 | 預設 /Gs1 (1 頁) |
| /Gm[-] | 最小重建 (啟用 /Gm 需 /Zi) | 依賴 .idb 檔 |
| /Gi[-] | 增量編譯 | 舊版功能 |
三、輸出檔案 (/F)
| 選項 | 說明 |
| /Fa[file] | 組合語言列表檔 |
| /Fa[sc] | 列表檔內容配置 (原始碼/機器碼/組語) |
| /Fo | 指定 .obj 輸出目錄/檔名 |
| /Fp | 指定預編譯標頭 .pch 路徑 |
| /Fd[file] | 指定 .pdb 偵錯資訊檔 |
| /Fr[file] | 瀏覽資訊 .sbr (舊版) |
| /FR[file] | 擴充瀏覽資訊 .sbr |
| /Fe | 指定 .exe 輸出檔名 |
| /Fm[file] | 對應檔 .map |
四、預處理器 (/P /C /D /U /I /X /E /EP)
| 選項 | 說明 |
| /D name[=val] | 定義巨集 (等同 #define) |
| /U name | 取消定義巨集 |
| /I path | 加入標頭搜尋路徑 |
| /X | 忽略標準包含路徑 |
| /FI file | 強制包含檔案 (如 stdafx.h) |
| /C | 保留註解於預處理輸出 |
| /E | 預處理輸出至 stdout (含 #line) |
| /EP | 預處理輸出至 stdout (無 #line) |
| /P | 預處理輸出至 .i 檔 |
五、語言與偵錯 (/Z /Zi /ZI /Z7 /Zd /Zp /vd /Za /Ze /noBool)
| 選項 | 說明 |
| /Zi | 產生 .pdb 偵錯資訊 (非 Edit&Continue) |
| /ZI | Edit & Continue 偵錯資訊 (Debug 預設) |
| /Z7 | 舊式偵錯資訊 (寫入 .obj) |
| /Zd | 僅行號資訊 |
| /Zp[n] | 結構對齊邊界 (1/2/4/8/16) |
| /Zs | 僅語法檢查,不產出 .obj |
| /vd0/1 | 停用/啟用 vtordisp (虛函式位移) |
| /vm | 成員指標表示法 |
| /Za | 停用 MS 擴充 (嚴格 ANSI) |
| /Ze | 啟用 MS 擴充 (預設) |
| /noBool | 停用 bool 關鍵字 |
六、雜項 (/W /w /WX /c /nologo /Tc /Tp /TC /TP /Yc /Yu /YX /Yd /V /Zm)
| 選項 | 說明 |
| /Wn | 警告等級 (1~4,預設 1,建議 3/4) |
| /w | 停用所有警告 |
| /WX | 視警告為錯誤 |
| /c | 僅編譯,不連結 |
| /nologo | 隱藏版權資訊 |
| /Tc file | 強制編譯為 C |
| /Tp file | 強制編譯為 C++ |
| /TC | 所有檔案編譯為 C |
| /TP | 所有檔案編譯為 C++ |
| /Yc[file] | 建立預編譯標頭 .pch |
| /Yu[file] | 使用預編譯標頭 |
| /YX | 自動預編譯標頭 |
| /Yd | 每個 .obj 含完整偵錯資訊 |
| /V str | 嵌入版本字串 |
| /Zm val | 最大記憶體配置百分比 (預編譯標頭用) |
七、連結器選項 (Project → Settings → Link)
| 選項 | 說明 |
| /MD /MDd | 動態連結 CRT (Release/Debug) |
| /MT /MTd | 靜態連結 CRT (Release/Debug) |
| /ML /MLd | 單執行緒靜態 CRT (舊版,已棄用) |
| /LD /LDd | 建立 DLL (Release/Debug) |
| /F num | 設定堆疊大小 (位元組) |
| /link [opts] | 傳遞選項給連結器 |
| /subsystem:console/windows | 子系統類型 |
| /incremental:yes/no | 增量連結 |
| /debug | 產生偵錯資訊 |
| /pdb:file | 指定 .pdb 檔 |
| /opt:ref/icf | 移除未用函式/合併相同函式 |
| /entry:symbol | 指定進入點 |
| /stack:reserve[,commit] | 堆疊保留/認可大小 |
八、專案類型對應的關鍵設定組合
| 專案類型 | C/C++ 關鍵選項 | Link 關鍵選項 |
| MFC DLL (共用) | /MDd /D_AFXDLL /ZI /Od | /DLL /MDd /incremental:yes |
| MFC EXE (共用) | /MDd /D_AFXDLL /ZI /Od | /subsystem:windows /MDd |
| MFC 靜態連結 | /MTd /ZI /Od | /MTd |
| 非 MFC 控制台 | /MTd /ZI /Od | /subsystem:console /MTd |
| Release 優化 | /O2 /MD /GF /Gy /Zi | /MD /opt:ref,icf |