本文包含编译器选项的分类列表。 有关按字母顺序排序的列表,请参阅按字母顺序列出的编译器选项。
Optimization
Option
Purpose
/dynamicdeopt
启用 C++动态调试(预览版) 调试优化代码,就像已编译的优化代码一样。
/favor:
生成针对一个指定体系结构或一系列体系结构进行优化的代码。
/O1
创建小代码。
/O2
创建快速代码。
/Ob
控制内联展开。
/Od
禁用优化。
/Og
Deprecated. 使用全局优化。
/Oi[-]
生成内部函数。
/Os
代码大小优先。
/Ot
代码速度优先。
/Ox
不包含 /GF 或 /Gy 的 /O2 子集。
/Oy
省略帧指针。 (仅 x86)
代码生成
Option
Purpose
/arch
最低 CPU 架构要求。
/clr
生成要在公共语言运行时上运行的输出文件。
/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 的可验证输出文件。
/EHa
启用 C++ 异常处理(出现 SEH 异常)。
/EHc
extern "C" 默认为 nothrow。
/EHr
始终生成 noexcept 运行时终止检查。
/EHs
启用 C++ 异常处理(无 SEH 异常)。
/feature
启用体系结构功能。
/forceInterlockedFunctions
根据目标 CPU 动态选择 Armv8.0 负载、存储独占指令或 Armv8.1 LSE 原子指令。17.14
/fp:contract
生成代码时考虑浮点收缩。
/fp:except[-]
生成代码时考虑浮点异常。
/fp:fast
“fast”浮点模型;结果可预测性较低。
/fp:precise
“precise”浮点模型;结果可预测。
/fp:strict
“strict”浮点模型(隐含 /fp:except)。
/fpcvt:BC
向后兼容的浮点数到无符号整数的转换。
/fpcvt:IA
Intel 本机浮点数到无符号整数的转换行为。
/fsanitize
启用擦除器检测(如 AddressSanitizer)的编译。
/fsanitize-coverage
为库(如 LibFuzzer)启用代码覆盖率检测的编译。
/GA
针对 Windows 应用程序进行优化。
/Gd
使用 __cdecl 调用约定。 (仅 x86)
/Ge
Deprecated. 激活堆栈探测。
/GF
启用字符串池。
/Gh
调用挂钩函数 _penter。
/GH
调用挂钩函数 _pexit。
/GL[-]
启用全程序优化。
/Gm[-]
Deprecated. 启用最小重新生成。
/Gr
使用 __fastcall 调用约定。 (仅 x86)
/GR[-]
启用运行时类型信息 (RTTI)。
/GS[-]
检查缓冲区安全性。
/Gs[n]
控制堆栈探测。
/GT
支持使用静态线程本地存储分配的数据的纤程安全。
/Gu[-]
确保 distinct 函数具有非重复地址。
/guard:cf[-]
添加控制流防护安全检查。
/guard:ehcont[-]
启用 EH 延续元数据。
/Gv
使用 __vectorcall 调用约定。 (仅限 x86 和 x64)
/Gw[-]
启用全程序全局数据优化。
/GX[-]
Deprecated. 启用同步异常处理。 请改用 /EH。
/Gy[-]
启用函数级链接。
/Gz
使用 __stdcall 调用约定。 (仅 x86)
/GZ
Deprecated. 启用快速检查。 (与 /RTC1 相同)
/homeparams
强制将传入寄存器的参数写入其在函数入口的堆栈上的位置。 此编译器选项仅适用于 x64 编译器(本机编译和跨平台编译)。
/hotpatch
创建可热修补的映像。
/jumptablerdata
在 .rdata 节中放置 switch case 语句跳转表。
/Qfast_transcendentals
生成快速先验。
/QIfist
Deprecated. 当需要从浮点型转换为整型时,取消调用 Helper 函数 _ftol 。 (仅 x86)
/Qimprecise_fwaits
移除 fwait 块中的 try 命令。
/QIntel-jcc-erratum
缓解 Intel JCC Erratum 微代码更新的性能影响。
/Qpar
启用循环的自动并行化。
/Qpar-report:n
启用自动并行化的报告级别。
/Qsafe_fp_loads
将整数移动指令用于浮点值,并禁用特定浮点加载优化。
/Qspectre[-]
针对一类 Spectre 攻击启用 CVE 2017-5753 缓解措施。
/Qspectre-load
为每个加载指令生成序列化指令。
/Qspectre-load-cf
为每个加载内存的控制流指令生成序列化指令。
/Qvec-report:n
启用自动矢量化的报告级别。
/RTC1
启用快速运行时检查(相当于 /RTCsu)。
/RTCc
在运行时转换为较小的类型检查。
/RTCs
启用堆栈帧运行时检查。
/RTCu
启用未初始化的本地使用情况检查。
/vlen
指定向量长度。
/volatile:iso
acquire/release 语义在 volatile 访问中不能得到保证。
/volatile:ms
acquire/release 语义在 volatile 访问中得到保证。
输出文件
Option
Purpose
/doc
将文档注释处理到一个 XML 文件中。
/FA
配置程序集列表文件。
/Fa
创建程序集列表文件。
/Fd
重命名程序数据库文件。
/Fe
重命名可执行文件。
/Fi
指定预处理输出文件名。
/Fm
创建映射文件。
/Fo
创建对象文件。
/Fp
指定预编译头文件名。
/FR、/Fr
命名生成的 .sbr 浏览器文件。
/Fr 已弃用。
/Ft
为 #import 生成的头文件的位置。
Preprocessor
Option
Purpose
/AI
指定在解析传递到 #using 指令的文件引用时搜索的目录。
/C
在预处理期间保留注释。
/D
定义常数和宏。
/E
将预处理器输出复制到标准输出。
/EP
将预处理器输出复制到标准输出。
/FI
预处理指定的包含文件。
/FU
强制使用文件名,就像它已被传递到 #using 指令一样。
/Fx
将插入的代码与源文件合并。
/I
在目录中搜索包含文件。
/P
将预处理器输出写入文件。
/PD
打印所有宏定义。
/PH
预处理时生成 #pragma file_hash。
/U
移除预定义宏。
/u
移除所有的预定义宏。
/X
忽略标准包含目录。
标头单元/模块
Option
Purpose
/exportHeader
创建由输入参数指定的标头单元文件 (.ifc)。
/headerUnit
指定在何处查找指定标头的标头单元文件 (.ifc)。
/headerName
根据指定的标头生成标头单元。
/ifcOutput
指定生成的 .ifc 文件的输出文件名或目录。
/interface
将输入文件视为模块接口单元。
/internalPartition
将输入文件视为内部分区单元。
/reference
使用命名模块 IFC。
/scanDependencies
在 C++ 标准 JSON 窗体中列出模块和标头单元依赖项。
/sourceDependencies
列出所有源级依赖项。
/sourceDependencies:directives
列出模块和标头单元依赖项。
/translateInclude
将 #include 视为 import。
语言
Option
Purpose
/await
启用协同例程(可恢复函数)扩展。
/await:strict
使用早期语言版本启用标准 C++20 协同例程支持。
/constexpr:backtrace
在诊断中显示 N 个 constexpr 评估(默认值:10)。
/constexpr:depth
constexpr 评估的递归深度限制(默认值:512)。
/constexpr:steps
在 N 步骤后终止 constexpr 评估(默认值:100000)。
/openmp
在源代码中启用 #pragma omp。
/openmp:experimental
启用 OpenMP 2.0 语言扩展并选择 OpenMP 3.0+ 语言扩展。
/openmp:llvm
使用 LLVM 运行时的 OpenMP 语言扩展。
/permissive[-]
设置标准一致性模式。
/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 标准预览功能。
/vd{0|1|2}
取消或启用隐藏的 vtordisp 类成员。
/vmb
对指向成员的指针使用最佳的基。
/vmg
对指向成员的指针使用完全一般性。
/vmm
声明多重继承。
/vms
声明单一继承。
/vmv
声明虚拟继承。
/Z7
生成与 C 7.0 兼容的调试信息。
/Za
在 C 代码中禁用某些 C89 语言扩展。
/Zc:__cplusplus[-]
启用 __cplusplus 宏以报告支持的标准(默认关闭)。
/Zc:__STDC__
启用 __STDC__ 宏以报告支持C标准(默认关闭)。
/Zc:alignedNew[-]
启用 C++17 过度对齐的动态分配(在 C++17 中默认启用)。
/Zc:auto[-]
对 auto 强制执行新的标准 C++ 含义(默认开启)。
/Zc:char8_t[-]
启用或禁用作为 u8 的 C++20 本机 const char8_t 文本支持(默认关闭,在 /std:c++20 下除外)。
/Zc:enumTypes[-]
为推断enum基类型启用标准C++规则(默认情况下为 Off,不隐含)。/permissive-
/Zc:externC[-]
对 extern "C" 函数(由 /permissive- 隐含)强制实施标准 C++ 规则。
/Zc:externConstexpr[-]
为 constexpr 变量启用外部链接(默认关闭)。
/Zc:forScope[-]
强制实施标准 C++ for 范围规则(默认开启)。
/Zc:gotoScope
围绕局部变量初始化(goto 隐含)强制实施标准 C++ /permissive- 规则。
/Zc:hiddenFriend[-]
强制实施标准C++隐藏的朋友规则(默示)。/permissive-
/Zc:implicitNoexcept[-]
在所需函数上启用隐式 noexcept(默认开启)。
/Zc:inline[-]
如果它们是 COMDAT 或仅具有内部链接,则删除未引用的函数或数据(默认关闭)。
/Zc:lambda[-]
为泛型 lambda 中的一致性模式语法检查启用新的 lambda 处理器。
/Zc:noexceptTypes[-]
强制实施 C++17 noexcept 规则(在 C++17 或更高版本中默认开启)。
/Zc:nrvo[-]
启用可选复制和移动省略(默认在 /O2、/permissive- 或 /std:c++20 或更高版本下启用)。
/Zc:preprocessor[-]
使用新的符合性预处理器(默认关闭,在 C11/C17 中除外)。
/Zc:referenceBinding[-]
UDT 临时不会绑定到非 const lvalue 引用(默认关闭)。
/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[-]
为 0 大小的对象数组调用成员 new/delete(默认开启)。
/Ze
Deprecated. 启用 C89 语言扩展。
/Zf
在并行生成中改进 PDB 生成时间。
/ZH:[MD5|SHA1|SHA_256|SHA384 |SHA512]
为调试信息中的校验和指定 MD5、SHA-1、SHA-256、SHA-38418.6.0 或SHA-512 18.6.0 。
/ZI
将调试信息包含在与“编辑并继续”兼容的程序数据库中。 (仅 x86)
/Zi
生成完整的调试信息。
/Zl
从 .obj 文件中移除默认库名。
/Zo[-]
为优化的代码生成更丰富的调试信息。
/Zp[n]
封装结构成员。
/Zs
只检查语法。
/ZW
生成要在 Windows 运行时上运行的输出文件。
18.6.0从 Visual Studio 2026 2026 18.6.0 版和 MSVC 版本 14.51 开始提供此选项。
Linking
Option
Purpose
/F
设置堆栈大小。
/LD
创建动态链接库。
/LDd
创建调试动态链接库。
/link
将指定的选项传递给 LINK。
/LN
创建 MSIL .netmodule。
/MD
使用 MSVCRT.lib 编译以创建多线程 DLL。
/MDd
使用 MSVCRTD.lib 编译以创建调试多线程 DLL。
/MT
使用 LIBCMT.lib 编译以创建多线程可执行文件。
/MTd
使用 LIBCMTD.lib 编译以创建调试多线程可执行文件。
Miscellaneous
Option
Purpose
/?
列出编译器选项。
@
指定响应文件。
/analyze
启用代码分析。
/bigobj
增加 .obj 文件中可寻址节的数目。
/c
编译但不链接。
/cgthreads
指定 cl.exe 线程数以用于优化和代码生成。
/errorReport
Deprecated.
Windows 错误报告 (WER) 设置控制错误报告。
/execution-charset
设置执行字符集。
/fastfail
启用快速失败模式。
/FC
在诊断文本中显示传递给 cl.exe 的源代码文件的完整路径。
/FS
强制写入到 PDB 文件以通过 MSPDBSRV.EXE 序列化。
/H
Deprecated. 限制外部(公共)名称的长度。
/HELP
列出编译器选项。
/J
更改默认的 char 类型。
/JMC
支持本机 C++“仅我的代码”调试。
/kernel
编译器和链接器创建可在 Windows 内核中执行的二进制文件。
/MP
同时生成多个源文件。
/nologo
取消显示登录版权标志。
/presetPadding
将基于堆栈的类类型的填充初始化为零。
/showIncludes
在编译期间显示所有包含文件的列表。
/source-charset
设置源字符集。
/Tc
指定 C 源文件。
/TC
指定所有源文件都是 C。
/Tp
指定 C++ 源文件。
/TP
指定所有源文件都是 C++。
/utf-8
将源和执行字符集设置为 UTF-8。
/V
Deprecated. 设置版本字符串。
/validate-charset
验证 UTF-8 文件以仅查找兼容的字符。
/volatileMetadata
对易失存储器访问生成元数据。
/Yc
创建 .PCH 文件。
/Yd
Deprecated. 将完整的调试信息放在所有对象文件中。 请改用 /Zi。
/Yl
创建调试库时插入 PCH 引用。
/Yu
在生成期间使用预编译头文件。
/Y-
忽略当前生成中的所有其他预编译头编译器选项。
/Zm
指定预编译头内存分配限制。
Diagnostics
Option
Purpose
/diagnostics:caret[-]
诊断格式:打印列和指示的源行。
/diagnostics:classic
使用旧诊断格式。
/diagnostics
诊断格式:打印列信息。
/external:anglebrackets
将通过 <> 包含的所有标头视为外部标头。
/external:env:
指定具有外部标头位置的环境变量。
/external:I
指定外部标头的位置。
/external:templates[-]
跨模板实例化链评估警告等级。
/external:W
设置外部标头的警告等级。
/options:strict
无法识别的编译器选项是错误。
/sdl
启用更多安全功能和警告。
/w
禁用所有警告。
/W0、、/W1/W2、/W3、/W4
设置输出警告等级。
/w1
针对指定的警告设置警告等级。
/Wall
启用所有警告,包括默认情况下禁用的警告。
/wd
禁用指定的警告。
/we
将指定的警告视为错误。
/WL
在从命令行编译 C++ 源代码时启用错误消息和警告消息的单行诊断。
/wo
仅显示一次指定的警告。
/Wv:xx[.yy[.zzzzz]]
禁用编辑器的指定版本后引入的警告。
/WX
将警告视为错误。
实验性选项
实验性选项只能由某些版本的编译器支持。 它们也可能在不同的编译器版本中表现不同。 实验性选项的最佳或唯一文档通常位于 Microsoft C++ 团队博客中。
Option
Purpose
/experimental:log
启用试验性结构化 SARIF 输出。
/experimental:module
启用实验性模块支持。 从 Visual Studio 2022 版本 17.14 开始过时。
已弃用并删除的编译器选项
Option
Purpose
/clr:noAssembly
Deprecated. 改用 /LN(创建 MSIL 模块)。
/errorReport
Deprecated. 错误报告由 Windows 错误报告 (WER) 设置控制。
/experimental:preprocessor
Deprecated. 启用符合实验性的预处理器支持。 请改用 /Zc:preprocessor。
/Fr
Deprecated. 创建无局部变量的浏览信息文件。
/Ge
Deprecated. 激活堆栈探测。 默认已启用。
/Gm
Deprecated. 启用最小重新生成。
/GX
Deprecated. 启用同步异常处理。 请改用 /EH。
/GZ
Deprecated. 启用快速检查。 请改用 /RTC1。
/H
Deprecated. 限制外部(公共)名称的长度。
/Og
Deprecated. 使用全局优化。
/QIfist
Deprecated. 曾用来指定如何从浮点类型转换到整型类型。
/V
Deprecated. 设置 .obj 文件版本字符串。
/Wp64
Obsolete. 检测 64 位可移植性问题。
/Yd
Deprecated. 将完整的调试信息放在所有对象文件中。 请改用 /Zi。
/Zc:forScope-
Deprecated. 在 for 循环范围中禁用一致性。
/Ze
Deprecated. 启用 语言扩展。
/Zg
已在 Visual Studio 2015 中删除。 生成函数原型。
17.14 从 Visual Studio 2022 版本 17.14 开始,此选项可用。
另请参阅
C/C++ 生成参考
MSVC 编译器选项
MSVC 编译器命令行语法