Share via


依字母順序排列的編譯器選項

此數據表包含編譯程式選項的字母清單。 如需依類別排序的編譯程式選項清單,請參閱 依類別 列出的編譯程式選項一文。

編譯器選項

選項 目的
@ 指定回應檔。
/? 列出編譯器選項。
/AI<dir> 指定要搜尋的目錄,以解析傳遞至 指示詞的 #using 檔案參考。
/analyze 啟用程式碼分析。
/arch:<IA32|SSE|SSE2|AVX|AVX2|AVX512> 最低 CPU 架構需求。 IA32、SSE 和 SSE2 只有 x86。
/arm64EC 產生與arm64EC ABI相容的程式代碼。
/await 啟用協同程式 (可繼續函式) 延伸模組。
/await:strict 使用舊版語言啟用標準 C++20 協同程序支援。
/bigobj 增加 .obj 檔案中可定址區段的數目。
/C 在前置處理過程中保留註解。
/c 編譯而不連結。
/cgthreads 指定要用於優化和產生程式代碼的 cl.exe 線程數目。
/clr 產生輸出檔案,以便在 Common Language Runtime 上執行。
/clr:implicitKeepAlive- 關閉的 System::GC::KeepAlive(this)隱含排放。
/clr:initialAppDomain 啟用 Visual C++ 2002 的初始 AppDomain 行為。
/clr:netcore 產生以 .NET Core 運行時間為目標的元件。
/clr:noAssembly 不要產生元件。
/clr:nostdimport 請勿以隱含方式匯入任何必要的元件。
/clr:nostdlib 搜尋元件時,請忽略系統 .NET Framework 目錄。
/clr:pure 產生僅限 IL 的輸出檔(沒有原生可執行程式碼)。
/clr:safe 產生僅限 IL 的可驗證輸出檔案。
/constexpr:backtrace<N> 在診斷中顯示 N constexpr 個評估 (預設值:10)。
/constexpr:depth<N> 評估的 constexpr 遞歸深度限制(預設值:512)。
/constexpr:steps<N> 在 N 個步驟之後終止 constexpr 評估 (預設值:100000)
/D<name>{=|#}<text> 定義常數和巨集。
/diagnostics 診斷格式:列印數據行資訊。
/diagnostics:caret[-] 診斷格式:列印數據行和指定的來源行。
/diagnostics:classic 使用舊版診斷格式。
/doc 將文件註解處理成 XML 檔案。
/E 複製前置處理器輸出至標準輸出。
/EHa 啟用 C++ 例外狀況處理(具有 SEH 例外狀況)。
/EHc extern "C" 預設為 nothrow
/EHr 一律產生 noexcept 運行時間終止檢查。
/EHs 啟用 C++ 例外狀況處理(沒有 SEH 例外狀況)。
/EP 複製前置處理器輸出至標準輸出。
/errorReport 已取代。 Windows 錯誤報告 (WER) 設定控制錯誤報告。
/execution-charset 設定執行字元集。
/experimental:log 啟用實驗式結構化 SARIF 輸出。
/experimental:module 啟用實驗模組支援。
/exportHeader 建立輸入自變數所指定的頭檔 (.ifc)。
/external:anglebrackets 將所有透過 包含的 <> 標頭視為外部。
/external:env:<var> 指定具有外部標頭位置的環境變數。
/external:I <path> 指定外部標頭的位置。
/external:templates[-] 評估跨範本具現化鏈結的警告層級。
/external:W<n> 設定外部標頭的警告層級。
/F 設定堆疊大小。
/FA 設定組件清單檔。
/Fa 建立組件清單檔。
/fastfail 啟用快速失敗模式。
/favor:<blend|AMD64|INTEL64|ATOM> 產生針對指定之結構或結構範圍進行最佳化的程式碼。
/FC 顯示診斷文字中傳遞至 cl.exe 之原始碼檔案的完整路徑。
/Fd 重新命名程式資料庫檔案。
/Fe 重新命名可執行檔。
/FI<file> 前置處理指定的包含檔。
/Fi 指定前置處理過的輸出檔名稱。
/Fm 建立對應檔 (Mapfile)。
/Fo 建立目的檔。
/Fp 指定先行編譯標頭檔的名稱。
/fp:contract 在產生程式代碼時,請考慮浮點收縮。
/fp:except[-] 在產生程式代碼時,請考慮浮點例外狀況。
/fp:fast “fast” 浮點模型;結果較不可預測的結果。
/fp:precise “precise” 浮點模型;結果是可預測的。
/fp:strict “strict” 浮點模型 (意指 /fp:except)。
/fpcvt:BC 回溯相容的浮點至無符號整數轉換。
/fpcvt:IA Intel原生浮點數至無符號整數轉換行為。
/FR, /Fr 命名產生的 .sbr 瀏覽器檔案。 /Fr 已被取代。
/FS 強制寫入 PDB 檔案,以透過 MSPDBSRV.EXE 串行化。
/fsanitize 啟用清理工具檢測的編譯,例如 AddressSanitizer。
/fsanitize-coverage 啟用連結庫的程式代碼涵蓋範圍檢測編譯,例如 LibFuzzer。
/Ft<dir> 針對 #import產生的頭檔位置。
/FU<file> 強制使用檔名,就好像它已傳遞至 #using 指示詞一樣。
/Fx 將插入的程式碼與原始程式檔合併。
/GA 對 Windows 應用程式進行最佳化。
/Gd 使用 __cdecl 呼叫慣例。 (僅限 x86)
/Ge 已取代。 啟動堆疊探查。
/GF 啟用字串共用。
/GH 呼叫攔截函式 _pexit
/Gh 呼叫攔截函式 _penter
/GL[-] 啟用整個程式最佳化。
/Gm[-] 已取代。 啟用最少重建。
/GR[-] 啟用執行階段類型資訊 (RTTI)。
/Gr 使用 __fastcall 呼叫慣例。 (僅限 x86)
/GS[-] 檢查緩衝區安全性。
/Gs[n] 控制堆疊探查。
/GT 對使用靜態執行緒區域儲存區所配置的資料支援 Fiber 安全性。
/Gu[-] 確定相異函式具有相異位址。
/guard:cf[-] 加入控制流程防護安全性檢查。
/guard:ehcont[-] 啟用 EH 接續元數據。
/Gv 使用 __vectorcall 呼叫慣例。 (僅限 x86 和 x64)
/Gw[-] 啟用整個程式全域資料最佳化。
/GX[-] 已取代。 啟用同步例外狀況處理。 請改用 /EH
/Gy[-] 啟用函式階層連結。
/GZ 已取代。 啟用快速檢查。 (與 /RTC1相同)
/Gz 使用 __stdcall 呼叫慣例。 (僅限 x86)
/H 已取代。 限制外部 (公用) 名稱的長度。
/headerName 從指定的標頭建置標頭單位。
/headerUnit 指定在何處尋找指定標頭的頭單元檔案 (.ifc)。
/HELP 列出編譯器選項。
/homeparams 在函式進入時,強制暫存器中所傳遞的參數寫入至堆疊上的位置。 這個編譯程式選項僅適用於 x64 編譯程式(原生和交叉編譯)。
/hotpatch 建立可線上修補的影像。
/I<dir> 搜尋包含檔的目錄。
/ifcOutput 指定已建置 .ifc 檔案的輸出檔名或目錄。
/interface 將輸入檔視為模組介面單位。
/internalPartition 將輸入檔視為內部數據分割單位。
/J 變更預設 char 類型。
/jumptablerdata 將 switch case 語句快捷方式數據表放在 .rdata 區段中。
/JMC 支援原生 C++ Just My Code 偵錯。
/kernel 編譯程式和連結器會建立可在 Windows 核心中執行的二進位檔。
/LD 建立動態連結程式庫。
/LDd 建立偵錯動態連結程式庫。
/link 傳遞指定的選項給 LINK。
/LN 建立 MSIL .netmodule
/MD 編譯以使用 MSVCRT.lib 建立多線程 DLL。
/MDd 編譯以使用 MSVCRTD.lib 建立偵錯多線程 DLL。
/MP 同時建置多重原始程式檔。
/MT 編譯以使用 LIBCMT.lib 建立多線程可執行檔。
/MTd 編譯以使用 LIBCMTD.lib 建立偵錯多線程可執行檔。
/nologo 隱藏登入程式的啟始資訊。
/O1 建立小型程式碼。
/O2 建立快速程式碼。
/Ob<n> 控制內嵌展開。
/Od 停用最佳化。
/Og 已取代。 使用全域最佳化。
/Oi[-] 產生內建函式。
/openmp 在原始碼開啟 #pragma omp
/openmp:experimental 啟用 OpenMP 2.0 語言延伸模組,並選取 [OpenMP 3.0+ 語言延伸模組]。
/openmp:llvm 使用 LLVM 執行時間的 OpenMP 語言延伸模組。
/options:strict 無法辨識的編譯程式選項是錯誤。
/Os 偏好小的程式碼。
/Ot 偏好快的程式碼。
/Ox 不包含 /GF 或 /Gy 的 /O2 子集。
/Oy 省略框架指標。 (僅限 x86)
/P 將前置處理器輸出寫入檔案。
/PD 列印所有宏定義。
/permissive[-] 設定標準一致性模式。
/PH 在前置處理時產生 #pragma file_hash
/presetPadding 零初始化堆疊型類別類型的填補。
/Qfast_transcendentals 產生快速超越函式。
/QIfist 已取代。 在必須從浮點類型轉換為整數類型時,抑制對 Helper 函式 _ftol 的呼叫。 (僅限 x86)
/Qimprecise_fwaits 移除 fwait 區塊內的 try 命令。
/QIntel-jcc-erratum 降低 Intel JCC erratum 微碼更新的效能影響。
/Qpar-report:<n> 啟用自動平行處理的報告層級。
/Qpar 啟用迴圈自動平行處理。
/Qsafe_fp_loads 使用浮點值的整數移動指令,並停用特定浮點數負載最佳化。
/Qspectre[-] 針對 Spectre 攻擊類別啟用 CVE 2017-5753 的風險降低功能。
/Qspectre-load 產生每個載入指令的串行化指令。
/Qspectre-load-cf 針對載入記憶體的每個控制流程指令產生串行化指令。
/Qvec-report:<n> 啟用自動向量化的報告層級。
/reference 使用具名模組 IFC。
/RTC1 啟用快速運行時間檢查(相當於 /RTCsu)。
/RTCc 在運行時間轉換成較小的類型檢查。
/RTCs 啟用堆疊框架運行時間檢查。
/RTCu 啟用未初始化的本機使用方式檢查。
/scanDependencies 列出 C++ 標準 JSON 格式的模組相依性。
/sdl 啟用更多安全性功能和警告。
/showIncludes 在編譯時顯示所有 Include 檔的清單。
/source-charset 設定來源字元集。
/sourceDependencies 列出所有來源層級相依性。
/sourceDependencies:directives 列出模組和標頭單位相依性。
/std:c++14 C++14 標準 ISO/IEC 14882:2014 (預設值)。
/std:c++17 C++17 標準 ISO/IEC 14882:2017。
/std:c++20 C++20 標準 ISO/IEC 14882:2020。
/std:c++latest 最新的 C++ 標準預覽功能草稿。
/std:c11 C11 標準 ISO/IEC 9899:2011。
/std:c17 C17 標準 ISO/IEC 9899:2018。
/std:clatest 最新的 C 標準預覽功能草稿。
/TC 指定所有來源檔案都是 C。
/Tc 指定 C 原始程式檔。
/TP 指定所有原始程式檔都是 C++。
/Tp 指定 C++ 原始程式檔。
/translateInclude 將 視為 #includeimport
/U<name> 移除某個預先定義巨集。
/u 移除所有預先定義巨集。
/utf-8 將來源和執行字元集設定為 UTF-8。
/V 已取代。 設定版本字串。
/validate-charset 僅驗證 UTF-8 檔案是否只有相容的字元。
/vd{0|1|2} 抑制或啟用隱藏的 vtordisp 類別成員。
/vmb 對指向成員的指標使用最佳基底。
/vmg 對指向成員的指標使用完整一般性。
/vmm 宣告多重繼承。
/vms 宣告單一繼承。
/vmv 宣告虛擬繼承。
/volatile:iso 取得/發行語意不保證在揮發性存取上。
/volatile:ms 在揮發性存取上保證的取得/發行語意。
/volatileMetadata 在揮發性記憶體存取上產生中繼資料。
/w 停用所有警告。
/W0, /W1, /W2, /W3, /W4 設定輸出警告層級。
/w1<n>, /w2<n>, /w3<n>, /w4<n> 設定指定警告的警告層級。
/Wall 啟用所有警告,包括預設停用的警告。
/wd<n> 停用指定的警告。
/we<n> 將指定的警告視為錯誤。
/WL 從命令列編譯 C++ 原始程式碼時,針對錯誤和警告訊息啟用單行診斷。
/wo<n> 只顯示指定的警告一次。
/Wv:xx[.yy[.zzzzz]] 停用在指定的編譯器版本之後引進的警告。
/WX 將警告視為錯誤。
/X 忽略標準 Include 目錄。
/Y- 忽略目前組建中所有其他先行編譯標頭編譯器選項。
/Yc 建立 .PCH 檔案。
/Yd 已取代。 將完整的偵錯資訊置於所有目的檔中。 請改用 /Zi
/Yl 在建立偵錯程式庫時插入 PCH 參考。
/Yu 在建置時使用先行編譯標頭檔。
/Z7 產生 C 7.0 相容的偵錯資訊。
/Za 停用 C 程式碼中的某些 C89 語言延伸模組。
/Zc:__cplusplus[-] __cplusplus啟用宏以報告支援的標準(預設為關閉)。
/Zc:__STDC__ __STDC__啟用宏以報告支援 C 標準(預設為關閉)。
/Zc:alignedNew[-] 啟用 C++17 過度對齊的動態配置(根據預設在 C++17 中為 開啟)。
/Zc:auto[-] 針對 (預設為 開啟) 強制執行新的標準 C++ 意義 auto
/Zc:char8_t[-] 啟用或停用 C++20 原生 u8 常值支援( const char8_t 預設為關閉,但底下除外 /std:c++20 )。
/Zc:enumTypes[-] 啟用類型扣減的標準 C++ 規則 enum (預設為關閉)。
/Zc:externC[-] 為函 extern "C" 式強制執行標準 C++ 規則(由 隱含)。 /permissive-
/Zc:externConstexpr[-] 啟用變數的外部連結 constexpr (預設為關閉)。
/Zc:forScope[-] 強制執行標準 C++ for 範圍規則(預設為 開啟)。
/Zc:gotoScope 在區域變數初始化周圍強制執行標準 C++ goto 規則(由 隱含)。 /permissive-
/Zc:hiddenFriend[-] 強制執行標準 C++ 隱藏的朋友規則 (隱含于 /permissive-
/Zc:implicitNoexcept[-] 在必要函式上啟用隱含 noexcept 功能(預設為開啟)。
/Zc:inline[-] 如果函式為 COMDAT 或只有內部連結,請移除未參考的函式或資料(預設為關閉)。
/Zc:lambda[-] 針對泛型 Lambda 中的一致性模式語法檢查啟用新的 Lambda 處理器。
/Zc:noexceptTypes[-] 強制執行 C++17 noexcept 規則(預設為 C++17 或更新版本)。
/Zc:nrvo[-] 啟用選擇性複製並移動 elisions (預設在 、 /permissive-/std:c++20 或 更新版本下 /O2 開啟)。
/Zc:preprocessor[-] 使用新的符合預處理器 (預設為關閉,C11/C17 除外)。
/Zc:referenceBinding[-] UDT 暫存不會系結至非 const lvalue 參考(預設為 off)。
/Zc:rvalueCast[-] 強制執行標準 C++ 明確類型轉換規則(預設為關閉)。
/Zc:sizedDealloc[-] 啟用 C++14 全域大小的解除配置函式(預設為 開啟)。
/Zc:strictStrings[-] 停用字串常值或 char*wchar_t* 轉換(預設為關閉)。
/Zc:templateScope[-] 強制執行標準 C++ 樣板參數陰影規則(預設為關閉)。
/Zc:ternary[-] 在運算元類型上強制執行條件運算子規則(預設為關閉)。
/Zc:threadSafeInit[-] 啟用安全線程的本機靜態初始化(預設為 開啟)。
/Zc:throwingNew[-] 假設 operator new 在失敗時擲回 (預設為關閉)。
/Zc:tlsGuards[-] 產生 TLS 變數初始化的執行時間檢查(預設為 開啟)。
/Zc:trigraphs 啟用三字 (過時,預設為關閉)。
/Zc:twoPhase[-] 使用不符合規範的範本剖析行為(預設符合)。
/Zc:wchar_t[-] wchar_t 是原生類型,而不是 typedef (預設為 開啟)。
/Zc:zeroSizeArrayNew[-] 針對物件的零大小陣列呼叫成員 new/delete (預設為 開啟)。
/Ze 已取代。 啟用 C89 語言延伸模組。
/Zf 以平行組建改善 PDB 產生時間。
/ZH:[MD5|SHA1|SHA_256] 針對偵錯資訊中的總和檢查碼,指定 MD5、SHA-1 或 SHA-256。
/ZI 將偵錯資訊包括在與「編輯後繼續」相容的程式資料庫中。 (僅限 x86)
/Zi 產生完整偵錯資訊。
/Zl 從檔案中移除預設程式庫名稱 .obj
/Zm 指定先行編譯標頭的記憶體配置上限。
/Zo[-] 為優化程式碼產生更豐富的偵錯資訊。
/Zp[n] 封裝結構成員。
/Zs 僅檢查語法。
/ZW 產生輸出檔案,以在Windows 執行階段上執行。

另請參閱

MSVC 編譯器選項
MSVC 編譯器命令列語法