HOME> 东京世界杯> 按类别列出的编译器选项

按类别列出的编译器选项

东京世界杯 2026-10-16 00:01:19
本文包含编译器选项的分类列表。 有关按字母顺序排序的列表,请参阅按字母顺序列出的编译器选项。 Optimization Option Purpose /dynamicdeopt 启用 C++...

本文包含编译器选项的分类列表。 有关按字母顺序排序的列表,请参阅按字母顺序列出的编译器选项。

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、、/w2/w3、、/w4

针对指定的警告设置警告等级。

/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 编译器命令行语法