C/C++ 属性页

在“项目”“属性”>“配置属性”“C/C++”下可以找到以下属性页>>:

C/C++ 常规属性

附加包含目录

指定要添加到包含路径的一个或多个目录。 如果有多个,则使用分号 (;) 分隔目录。 设置 /I(附加包含目录)编译器选项。

其他 #using 目录

指定一个或多个要搜索的目录,以解析传递给 #using 指令的名称。 如果添加多个目录,请使用分号分隔目录(;)。 设置 /AI 编译器选项。

其他 BMI 目录

指定一个或多个要搜索的目录,以解析传递给 import 指令的名称。 如果添加多个目录,请使用分号分隔目录(;)。 设置 /ifcSearchDir[path] 编译器选项。

其他模块依赖项

指定一个或多个模块,用于解析传递给 import 指令的名称。 如果添加多个目录,请使用分号分隔目录(;)。 设置 /reference 编译器选项。

其他头单元依赖项

指定一个或多个头单元,用于解析传递给 import 头指令的名称。 如果添加多个目录,请使用分号分隔目录(;)。 设置 /headerUnit 编译器选项。

扫描源代码以查找模块依赖关系

如果此属性设置为 “是”,编译器将扫描所有 C++ 源,而不仅仅是模块接口和标头单元源,以获取模块和标头单元依赖项。 生成系统会构建完整的依赖项图,确保所有导入的模块和头文件单元在编译依赖于它们的文件之前被构建。 当 扫描源文件中的模块依赖项 和 将包含转换为导入 均设置为 是 时,任何在与该头文件位于同一目录中的 header-units.json 文件里指定的头文件都会被编译为头单元。

扩展名为 .ixx 的文件,以及其 文件属性>C/C++>高级>编译方式 属性设置为 编译为 C++ 标头单元 (/exportHeader) 的文件,始终都会被扫描。

扩展名为 .ixx 的文件,以及将其文件属性>C/C++>编译为属性设置为编译为 C++ 头单元 (/exportHeader) 的文件,始终会被扫描。

将 Include 转换为 Import

当此属性设置为 “是”时,如果满足某些条件,编译器会将指令 #include 视为 import 指令:头文件在同一 header-units.json 目录中的文件中指定,并且已编译的标头单元(文件 .ifc )可用于头文件。 否则,头文件被视为普通 #include。 header-units.json 文件用于为每个 #include 生成符号不重复的头单元。 当 将 include 转换为 import 和 扫描源文件中的模块依赖项 都设置为 是 时,编译器会自动查找所有可编译为头单元的头文件。 此属性设置 /translateInclude 编译器选项。

调试信息格式

指定编译器生成的调试信息的类型。 此属性需要兼容的链接器设置。 设置 /Z7、/Zi、/ZI(调试信息格式)编译器选项。

选择

  • 无 (None) - 不生成调试信息,因此编译速度可能更快。
  • C7 兼容 (OldStyle) - 生成包含完整符号调试信息的对象文件。 不生成 PDB 文件。
  • 程序数据库 (ProgramDatabase) - 生成一个程序数据库(PDB),其中包含用于调试器的类型信息和符号调试信息。 符号化调试信息包含变量的名称和类型以及函数和行号。
  • Program Database for Edit And Continue (EditAndContinue) - 生成程序数据库,如前所述,采用支持 “编辑并继续” 功能的格式。

支持“仅我的代码”调试

添加用于在此编译单元中启用仅我的代码调试的支持代码。 设置 /JMC。

支持 C++ 动态调试

(预览版)设置编译器标志 /dynamicdeopt 以打开 C++ 动态调试。 借助按需函数反优化,可以放置反优化断点并在任何位置单步执行。 使用此模式调试优化代码。

公共语言运行时支持

使用 .NET 运行时服务。 此开关与其他一些开关不兼容。 有关详细信息,请参阅 /clr 系列交换机的文档。

选择

  • 无公共语言 RunTime 支持 - 无公共语言运行时支持。
  • 公共语言运行时支持 - 为应用程序创建可供其他 CLR 应用程序使用的元数据。 还允许应用程序使用其他 CLR 组件的元数据中的类型和数据。
  • 纯 MSIL 公共语言运行时支持 - 生成不包含本机可执行代码的纯 MSIL 输出文件,不过它可以包含编译为 MSIL 的本机类型。
  • 安全 MSIL 公共语言运行时支持 - 生成纯 MSIL(不包含本机可执行代码)且可验证的输出文件。

使用 Windows 运行时扩展

使用 Windows 运行时语言扩展。 设置 /ZW。

关闭启动横幅显示

禁止在编译器启动时显示登录横幅,并在编译期间禁止显示信息性消息。

警告级别

选择编译器对代码错误的严格程度。 设置 /W0 - /W4。

选择

  • 关闭所有警告 - 级别 0 会禁用所有警告。
  • Level1 - 级别 1 会显示严重警告。 级别 1 是命令行的默认警告级别。
  • Level2 - 级别 2 显示所有级别 1 警告以及严重程度低于级别 1 的警告。
  • Level3 - 级别 3 会显示所有级别 2 警告,以及针对生产用途建议的所有其他警告。
  • Level4 - 级别 4 显示所有级别 3 警告以及信息性警告,这些警告在大多数情况下通常都可以安全地忽略。
  • EnableAllWarnings - 启用所有警告,包括默认禁用的警告。

将警告视为错误

将编译器警告视为错误。 对于新项目,最好在每次编译时都使用 /WX。 解决所有警告,以尽量减少难以发现的代码缺陷。

警告版本

隐藏特定版本的编译器发布后引入的警告。 设置 /Wv:xx[.yy[.zzzzz]]。

诊断格式

提供丰富的诊断功能,在诊断消息中包含列信息和源上下文。

选择

  • 插入符号 - 在诊断消息中提供列信息。 此外,还会输出相关的源代码行,并用插入符号标示出错的列。
  • 列信息 - 在适用的情况下,还会提供发出诊断的行内列号。
  • 经典 - 仅输出以前的简洁诊断消息及其行号。

SDL 检查

安全开发生命周期 (SDL) 建议的其他检查。 包括启用附加的安全代码生成功能,并将额外的安全相关警告视为错误。 设置 /sdl、/sdl-。

多处理器编译

启用多处理器编译。 设置 /MP 编译器选项。

启用地址消毒器

使用 AddressSanitizer 工具编译和链接程序。 此属性目前支持 x86 和 x64 目标生成。 设置 /fsanitize 编译器选项。

启用Fuzzer支持(实验性)

使用模糊测试器编译程序。 为最佳结果启用 AddressSanitizer。 目前可用于 x86 和 x64 构建。 设置 /fsanitize=fuzzer。

C/C++ 优化属性

优化

选择用于代码优化的选项。 选择 “自定义 ”以使用特定的优化选项。 设置 /Od、/O1、/O2。

选择

  • 自定义 - 自定义优化。
  • 禁用 - 禁用优化。
  • 最大优化 (偏爱大小) - 等效于 /Os /Oy /Ob2 /Gs /GF /Gy。
  • 最大优化(偏向速度) - 等效于 /Oi /Ot /Oy /Ob2 /Gs /GF /Gy。
  • 优化(优先速度) - 等效于 /Oi /Ot /Oy /Ob2。

内联函数扩展

选择构建时的内联函数展开级别。 设置 /Ob。

选择

  • 默认值
  • 禁用模式 - 禁用内联展开,该功能默认处于启用状态。
  • 仅 __inline - 仅展开标记为 inline、__forceinline或 __inline 的函数。 或者在 C++ 成员函数的类声明中定义。
  • 任何适当函数 - 扩展标记为 或 inline 的函数,以及编译器选择的任何其他函数__inline。 (是否展开由编译器自行决定。这种由编译器选择的展开通常称为 自动内联。)

启用内部函数

启用内在函数。 使用内部函数可以更快地生成但可能更大的代码。 设置 /Oi。

优先考虑大小或速度

是支持代码大小还是代码速度。 Global Optimization 必须开启。 设置 /Ot、/Os。

选择

  • 优先减小代码 - 通过指示编译器优先优化大小而不是速度来最小化 EXE 和 DLL 的大小。
  • 优先加快代码速度 - 通过指示编译器优先优化速度而不是大小来最大化 EXE 和 DLL 的速度。 (启用优化时,此值为默认值。
  • 两者都不是 - 不优化大小和速度。

省略帧指针

禁止在调用堆栈上创建帧指针。

启用光纤安全优化

为使用光纤访问线程本地存储的应用程序启用光纤安全优化。 设置 /GT。

全程序优化

通过将代码生成延迟到链接时间来启用跨模块优化。 需要选择链接器选项“链接时间代码生成”。 设置 /GL。

C/C++ 预处理器属性

预处理器定义

为源文件定义预处理符号。

取消定义预处理器定义

指定取消定义一个或多个预处理器。 设置 /U。

取消所有预处理器定义

取消定义以前定义的所有预处理器值。 设置 /u。

忽略标准 Include 路径

防止编译器在 INCLUDE 环境变量指定的目录中搜索 include 文件。

预处理文件

预处理 C 和 C++ 源文件,并将预处理的输出写入文件。 此选项会抑制编译,且不生成 .obj 文件。

预处理抑制行号

在没有 #line 指令的情况下进行预处理。

保留注释

启用此选项可在文件和其他预处理器输出中 .i 保留 C 和 C++ 源注释 (// 和 /* ... */)。 默认情况下,预处理器会删除注释。

需要设置至少一个 预处理 选项。 设置 /C。

使用符合标准的预处理器

使用符合标准的预处理器(/Zc:preprocessor)。 当前在 /std:c11 及更高版本中隐式启用。 若要使用旧预处理器,请将此属性设置为 “否”。

C/C++ 代码生成属性

启用字符串池

启用此属性以启用字符串池,它将相同的字符串合并为编译程序中的一个只读副本。 这可能会生成更小的程序。 /O1, /O2并 /ZI 自动设置 /GF 选项。

启用最小重新生成

启用最小重新生成,该选项用于确定是否重新编译包含发生更改的 C++ 类定义所在头文件(.h)的 C++ 源文件。

启用 C++ 异常

指定将由编译器使用的异常处理模型。

选择

  • 是(带 SEH 异常) - 捕获异步(结构化)异常和同步 (C++) 异常的异常处理模型。 设置 /EHa。
  • 是 - 仅捕获 C++ 异常的异常处理模型,并将编译器配置为假定 extern "C" 函数永远不会引发 C++ 异常。 设置 /EHsc。
  • 是,与 Extern C 函数一起使用 - 仅捕获 C++ 异常的异常处理模型,并将编译器配置为假定 extern "C" 函数会引发异常。 设置 /EHs。
  • 否 - 不处理异常。

较小类型检查

启用检查是否转换为较小的类型。 与调试以外的任何优化类型不兼容。 设置 /RTCc。

基本运行时检查

启用基本运行时错误检查。 与调试以外的任何优化类型不兼容。 设置 /RTCs、/RTCu、/RTC1。

选择

  • 堆栈帧 - 启用堆栈帧运行时错误检查。
  • 未初始化变量 - 当使用尚未初始化的变量时进行报告。
  • 两者 (/RTC1,等效于 /RTCsu) - 等效于 /RTCsu。
  • 默认 - 默认运行时检查。

运行时库

指定用于链接的运行时库。 设置 /MT、/MTd、/MD、/MDd。

选择

  • 多线程 - 使应用程序使用运行时库的多线程静态版本。
  • 多线程调试 - 定义_DEBUG和_MT。 此选项还会导致编译器将库名称 LIBCMTD.lib 放入 .obj 文件中,以便链接器用于 LIBCMTD.lib 解析外部符号。
  • 多线程 DLL - 使应用程序使用特定于 DLL 的多线程版本的运行时库。 定义 _MT 和 _DLL,并使编译器将库名 MSVCRT.lib 放入 文件中.obj。
  • 多线程调试 DLL - 定义_DEBUG_MT并_DLL导致应用程序使用运行时库的调试、特定于 DLL 的多线程版本。 它还会导致编译器将库名称 MSVCRTD.lib 放入 .obj 文件中。

结构成员对齐

指定结构成员按 1、2、4、8 或 16 字节边界对齐。 设置 /Zp。

选择

  • 1 字节 - 在一字节边界上打包结构。 与 /Zp 相同。
  • 2 字节 - 在二字节边界上打包结构。
  • 4 字节 - 在四字节边界上打包结构。
  • 8 字节 - 在八字节边界上打包结构(默认值)。
  • 16 字节 - 在十六字节边界上打包结构。
  • 默认 - 默认对齐设置。

为结构成员对齐指定 1、2、4 或 8 字节边界。 设置 /Zp。

选择

  • 1 字节 - 在一字节边界上打包结构。 与 /Zp 相同。
  • 2 字节 - 在二字节边界上打包结构。
  • 4 字节 - 在四字节边界上打包结构。
  • 8 字节 - 在八字节边界上打包结构(默认值)。
  • 默认 - 默认对齐设置。

安全检查

帮助检测堆栈缓冲区溢出,攻击者可以利用这些溢出来入侵应用程序。

选择

  • 禁用安全检查 - 设置 /GS-。
  • 启用安全检查 - 设置 /GS。

控制流防护

有助于检测试图跳转到非法代码块的行为。

选择

  • 是 - 启用控制流防护。 设置 /guard:cf。
  • 否

启用函数级别链接

允许编译器以打包函数 (COMDAT) 形式对各个函数进行打包。 需进行此操作后才能编辑并继续工作。 设置 /Gy。

启用并行代码生成

启用优化时,允许编译器为使用 #pragma loop(hint_parallel[(n)]) 标识的循环生成并行代码。

启用增强的指令集

启用在支持增强指令集的处理器上找到的指令。 例如,SSE、SSE2、AVX 和 AVX2 对 IA-32 的增强功能,以及对 x64 的 AVX 和 AVX2 增强功能。 /arch:SSE 仅在 x86 版本中可用。 /arch:SSE2 适用于 x86 和 x64 内部版本,是这两种体系结构的默认值。 可以使用 /arch:IA32 禁用增强的指令。 有关详细信息,请参阅/arch (x86), /arch (x64), /arch (ARM64)和/arch (ARM).

选择

  • 流式处理 SIMD 扩展 (X86) - 启用流式处理 SIMD 扩展。 设置 /arch:SSE。
  • 流式处理 SIMD 扩展 2 (X86) - 启用流式处理 SIMD 扩展 2。 设置 /arch:SSE2。
  • 高级矢量扩展 (X86/x64) - 启用高级矢量扩展。 设置 /arch:AVX。
  • 高级矢量扩展 2 (x86/x64) - 启用高级矢量扩展 2。 设置 /arch:AVX2。
  • 高级矢量扩展 512 (x86/x64) - 启用高级矢量扩展 512。 设置 /arch:AVX512。
  • 高级矢量扩展 AVX10.1 (X86/x64) - 启用高级矢量扩展 10 版本 1。 设置 /arch:AVX10.1。
  • 高级矢量扩展 AVX10.2 (X86/x64) - 启用高级矢量扩展 10 版本 2。 设置 /arch:AVX10.2。
  • 虚拟化扩展 (ARM) 。 启用 ARM 虚拟化扩展。 设置 /arch:ARMv7VE。
  • ARM VFPv4 指令(ARM)。 启用 ARM VFPv4 指令。 设置 /arch:VFPv4。
  • CPU 扩展要求 ARMv8.0-A (ARM64)。 启用 ARMv8.0-A 要求。 设置 /arch:arm8.0。
  • CPU 扩展要求 ARMv8.1-A (ARM64)。 启用 ARMv8.1-A 要求。 设置 /arch:arm8.1。
  • CPU 扩展要求 ARMv8.2-A (ARM64)。 启用 ARMv8.2-A 要求。 设置 /arch:arm8.2。
  • CPU 扩展要求 ARMv8.3-A (ARM64)。 启用对 ARMv8.3-A 要求的支持。 设置 /arch:arm8.3。
  • CPU 扩展要求 ARMv8.4-A (ARM64)。 启用 ARMv8.4-A 要求。 设置 /arch:arm8.4。
  • CPU 扩展要求 ARMv8.5-A (ARM64)。 启用 ARMv8.5-A 要求。 设置 /arch:arm8.5。
  • CPU 扩展要求 ARMv8.6-A (ARM64)。 启用 ARMv8.6-A 要求。 设置 /arch:arm8.6。
  • CPU 扩展要求 ARMv8.7-A (ARM64)。 启用 ARMv8.7-A 要求。 设置 /arch:arm8.7。
  • CPU 扩展要求 ARMv8.8-A (ARM64)。 启用 ARMv8.8-A 要求。 设置 /arch:arm8.8。
  • 无增强指令 - 禁用 x86 版本的增强说明。 设置 /arch:IA32。
  • 未设置 - 不会显式设置 /arch 选项。

启用在支持增强指令集的处理器上找到的指令。 例如,SSE、SSE2、AVX 和 AVX2 对 IA-32 的增强功能,以及对 x64 的 AVX 和 AVX2 增强功能。 目前仅在为 x86 体系结构生成时可以使用 /arch:SSE 和 /arch:SSE2。 如果未指定选项,编译器使用在支持 SSE2 的处理器上找到的指令。 可以使用 /arch:IA32 禁用增强的指令。 有关详细信息,请参阅/arch (x86), /arch (x64), /arch (ARM64)和/arch (ARM).

选择

  • 流式处理 SIMD 扩展 (X86) - 启用流式处理 SIMD 扩展。 设置 /arch:SSE。
  • 流式处理 SIMD 扩展 2 (X86) - 启用流式处理 SIMD 扩展 2。 设置 /arch:SSE2。
  • 高级矢量扩展 (X86/x64) - 启用高级矢量扩展。 设置 /arch:AVX。
  • 高级矢量扩展 2 (x86/x64) - 启用高级矢量扩展 2。 设置 /arch:AVX2。
  • 高级矢量扩展 512 (x86/x64) - 启用高级矢量扩展 512。 设置 /arch:AVX512。
  • 高级矢量扩展 AVX10.1 (X86/x64) - 启用高级矢量扩展 10 版本 1。 设置 /arch:AVX10.1。
  • 虚拟化扩展 (ARM) 。 启用 ARM 虚拟化扩展。 设置 /arch:ARMv7VE。
  • ARM VFPv4 指令(ARM)。 启用 ARM VFPv4 指令。 设置 /arch:VFPv4。
  • CPU 扩展要求 ARMv8.0-A (ARM64)。 启用 ARMv8.0-A 要求。 设置 /arch:arm8.0。
  • CPU 扩展要求 ARMv8.1-A (ARM64)。 启用 ARMv8.1-A 要求。 设置 /arch:arm8.1。
  • CPU 扩展要求 ARMv8.2-A (ARM64)。 启用 ARMv8.2-A 要求。 设置 /arch:arm8.2。
  • CPU 扩展要求 ARMv8.3-A (ARM64)。 启用对 ARMv8.3-A 要求的支持。 设置 /arch:arm8.3。
  • CPU 扩展要求 ARMv8.4-A (ARM64)。 启用 ARMv8.4-A 要求。 设置 /arch:arm8.4。
  • CPU 扩展要求 ARMv8.5-A (ARM64)。 启用 ARMv8.5-A 要求。 设置 /arch:arm8.5。
  • CPU 扩展要求 ARMv8.6-A (ARM64)。 启用 ARMv8.6-A 要求。 设置 /arch:arm8.6。
  • CPU 扩展要求 ARMv8.7-A (ARM64)。 启用 ARMv8.7-A 要求。 设置 /arch:arm8.7。
  • CPU 扩展要求 ARMv8.8-A (ARM64)。 启用 ARMv8.8-A 要求。 设置 /arch:arm8.8。
  • 无增强指令 - 禁用 x86 版本的增强说明。 设置 /arch:IA32。
  • 未设置 - 不会显式设置 /arch 选项。

选择

  • 流式 SIMD 扩展 - 流式 SIMD 扩展。 设置 /arch:SSE
  • 流式 SIMD 扩展 2 - 流式 SIMD 扩展 2。 设置 /arch:SSE2
  • 高级向量扩展 - 高级向量扩展。 设置 /arch:AVX
  • 高级向量扩展 2 - 高级向量扩展 2。 设置 /arch:AVX2
  • 没有增强指令 - 没有增强指令。 设置 /arch:IA32
  • 未设置 - 未设置。

启用矢量长度

允许为 /arch:AVX512 和 /arch:AVX10.x 标志选择向量长度。 允许的值为 256 位和 512 位(X86/X64)。

浮点模型

设置浮点模型。 设置 /fp:precise、/fp:strict、/fp:fast。

选择

  • 精确 - 默认。 改善相等性和不相等性的浮点测试一致性。
  • 严格 - 最严格的浮点模型。 /fp:strict 导致 fp_contract 关闭并 fenv_access 打开。 /fp:except 是隐式使用的,可以通过显式指定 /fp:except- 来禁用。 与 /fp:except- 一起使用时,/fp:strict 将强制执行严格的浮点语义,但不考虑异常事件。
  • 快速 - 在大多数情况下创建最快的代码。

启用浮点异常

可靠的浮点异常模型。 异常将在触发后立即引发。 设置 /fp:except。

创建可热修补的映像

启用热修补时,编译器可确保每个函数的第一条指令为两个字节,这是热修补所需的。 设置 /hotpatch。

Spectre 缓解措施

CVE 2017-5753 的 Spectre 缓解措施。 设置 /Qspectre。

选择

  • 已启用 - 为 CVE 2017-5753 启用 Spectre 缓解。
  • 所有负载 - 在所有负载上启用 Spectre 缓解措施。
  • 所有控制流加载 - 为控制流加载启用 Spectre 缓解措施。
  • 已禁用 - 未设置。

Spectre 缓解措施

CVE 2017-5753 的 Spectre 缓解措施。 设置 /Qspectre。

选择

  • 已启用 - 为 CVE 2017-5753 启用 Spectre 缓解。
  • 已禁用 - 未设置。

启用 Intel JCC 错误缓解措施

为应对由于Intel JCC勘误微代码更新导致的性能影响的软件缓解措施。 设置 /QIntel-jcc-erratum。

启用 EH 续续元数据

生成用于运行时 RIP 验证的二进制文件中所有有效异常处理后续目标的排序列表。 目前可用于 x64 内部版本。 设置 /guard:ehcont。

启用已签名的返回

启用已签名的返回,这有助于检测并防止尝试从函数返回中调度到非法块。 目前可用于 ARM64 构建。 设置 /guard:signret。

C/C++ 语言属性

禁用语言扩展

抑制或启用语言扩展。 设置 /Za。

将 WChar_t 视为内置类型

启用此属性后,类型 wchar_t 将成为一种本机类型,并且会以与 short 映射到 __int16 相同的方式映射到 __wchar_t。 /Zc:wchar_t 默认开启。

强制 For 循环范围内的遵从性

使用 Microsoft 扩展为 for 语句循环实现标准 C++ 行为。 设置 /Za、/Ze(禁用语言扩展)。 /Zc:forScope 默认开启。

删除未引用的代码和数据

启用此属性时,编译器不再为未引用的代码和数据生成符号信息。

强制实施类型转换规则

用于根据 C++11 标准将右值引用类型标识为强制转换操作的结果。

启用运行时类型信息

在运行时添加用于检查 C++ 对象类型的代码(运行时类型信息或 RTTI)。 设置 /GR、/GR-。

打开 MP 支持

启用 OpenMP 2.0 语言扩展。 设置 /openmp。

C++ 语言标准

确定编译器强制执行的 C++ 语言标准。 默认值不会设置标准选项,因此编译器使用其默认 C++14 设置。 如果选择特定值,则会设置相应的 /std 编译器选项。

选择

  • 默认(ISO C++14 标准)
  • ISO C++14 标准 (/std:c++14)
  • ISO C++17 标准 (/std:c++17)
  • ISO C++20 标准 (/std:c++20)
  • 预览版 - ISO C++23 标准版(/std:c++23preview)
  • 预览 - 最新 C++ 工作草案中的功能(/std:c++latest)

C 语言标准

确定编译器强制执行的 C 语言标准。 默认值不会设置标准选项,因此编译器使用其默认的旧版 MSVC 设置。 如果选择特定值,则会设置相应的 /std 编译器选项。

选择

  • 默认(旧版 MSVC)
  • ISO C11 标准 (/std:c11)
  • ISO C17 (2018) 标准 (/std:c17)
  • 预览 - 最新 C 工作草稿中的功能(/std:clatest)

遵从性模式

启用或抑制遵从性模式。 设置 /permissive-。

启用实验性的 C++ 标准库模块

对 C++ 模块 TS 和标准库模块的试验性支持。

生成 ISO C++23 标准库模块

从 Visual Studio 17.6 开始,当此属性启用并且 C++语言标准 设置为 /std:c++latest时,Microsoft C++项目会自动查找并生成 ISO C++23 标准库模块。 这使你能够在 C++ 代码中import std或import std.compat。

C/C++ 预编译标头属性

预编译头

创建/使用预编译头

在生成期间启用创建或使用预编译标头。 设置 /Yc、/Yu。

选择

  • 创建 - 指示编译器创建一个预编译头 () 文件,该文件表示特定点的编译状态.pch。
  • 使用 - 指示编译器在当前编译中使用现有的预编译头 (.pch) 文件。
  • 不使用预编译头 - 不使用预编译头。

预编译标头文件

指定编译器用于创建或访问预编译标头的头文件的名称。 设置 /Yc、/Yu。

预编译头输出文件

指定已生成的预编译头文件的路径或名称。 设置 /Fp。

C/C++ 输出文件属性

扩展归因源

创建一个列表文件,其中包含注入到源文件中的扩展属性。 设置 /Fx。

汇编程序输出

指定程序集语言输出文件的内容。 设置 /FA、/FAc、/FAs、/FAcs。

选择

  • 无列表 - 无列表。
  • 仅汇编列表 - 汇编代码:.asm。
  • 使用计算机代码的程序集 - 计算机和程序集代码: .cod。
  • 使用源代码的程序集 - 源代码和程序集代码: .asm。
  • 程序集、计算机代码和源代码 - 程序集 、计算机代码和源代码: .cod。

将 Unicode 用于程序集列表

以 UTF-8 格式创建输出文件。

ASM 列表位置

指定 ASM 列表文件的相对路径或名称。 可以是文件或目录名称。 设置 /Fa。

模块输出文件名

模块或标头单元输出 (BMI) 文件位置。 可以是文件或目录名称。 设置 /ifcOutput[name]。

模块依赖项文件名

指定生成的模块依赖项文件的路径和/或名称。 设置 /scanDependencies[path]。

对象文件名

指定一个名称以覆盖默认的对象文件名。 可以是文件或目录名称。 设置 /Fo。

程序数据库文件名

指定编译器生成的 PDB 文件的名称。 此外,指定所需的编译器生成的 IDB 文件的基名称。 可以是文件或目录名称。 设置 /Fd。

生成 XML 文档文件

指定编译器应生成 XML 文档注释文件 (.XDC)。 设置 /doc。

XML 文档文件名

指定生成的 XML 文档文件的名称。 可以是文件或目录名称。 设置 /doc:<名称>。

生成源依赖项文件

生成 JSON 文件,其中包含编译器用于编译源的所有文件的列表。 设置 /sourceDependencies。

源依赖项文件名

指定生成的源依赖项文件的路径和/或名称。 设置 /sourceDependencies[path]。

C/C++ 浏览信息属性

启用浏览信息

指定编译器是否应生成 .bsc 文件。 设置 /FR。

浏览信息文件

指定浏览器信息文件的可选名称。 设置 /FR<名称>。

C/C++ 外部包含属性

将包含在尖括号中的文件视为外部文件

指定是否将尖括号包含的文件视为外部文件。 将此属性设置为 Yes 可设置 /external:anglebrackets 编译器选项。

外部头警告级别

选择编译器对外部头文件中代码错误的处理严格程度。 此属性设置 /external:Wn 编译器选项。 如果将此值设置为“继承项目警告级别”或默认值,则会忽略其他 /external 选项。

外部头文件中的模板诊断

指定是否在整个模板实例化链中评估警告级别。 将此属性设置为 Yes 可设置 /external:templates- 编译器选项。

禁用外部头文件的代码分析

禁用外部头文件的代码分析。 设置 /analyze:external- 编译器选项。

外部头文件分析规则集

针对外部头指定代码分析规则集重写。 如果未指定此属性,则使用代码分析设置。 设置 /analyze:external:ruleset path 编译器选项。

C/C++ 高级属性

调用约定

为应用程序选择默认调用约定(可由函数重写)。 设置 /Gd、/Gr、/Gz、/Gv。

选择

  • __cdecl - 将所有函数的调用约定指定为 __cdecl,但 C++ 成员函数以及标记为 __stdcall 或 __fastcall 的函数除外。
  • __fastcall - 为所有函数指定 __fastcall 调用约定,但 C++ 成员函数以及标记为 __cdecl 或 __stdcall 的函数除外。 所有 __fastcall 函数都必须有原型。
  • __stdcall - 为所有函数指定 __stdcall 调用约定,但 C++ 成员函数以及标记为 __cdecl 或 __fastcall 的函数除外。 所有 __stdcall 函数都必须有原型。
  • __vectorcall - 指定除 C++ 成员函数以及标记为 __cdecl、__fastcall 或 __stdcall 的函数外,所有函数的 __vectorcall 调用约定。 所有 __vectorcall 函数都必须有原型。

编译为

为源文件选择编译语言选项。 设置/TC、/TP、/interface、/internalPartition或/exportHeader选项。

选择

  • 默认 - 默认。
  • 编译为 C 代码 (/TC) - 将指定的源文件编译为 C 代码。 默认情况下,扩展名为.c的文件编译为 C。
  • 编译为 C++ 代码 (/TP) - 将指定的源文件编译为 C++ 代码。 默认情况下,所有扩展名不是 .c、.ixx、.cppm 或 .h,或者没有扩展名的源文件,都会按 C++ 编译。
  • 编译为 C++ 模块代码 (/interface) - 将指定的源文件编译为 C++ 模块代码。 默认情况下,具有 .ixx 或 .cppm 扩展的文件编译为 C++ 模块代码。
  • 编译为 C++ 模块内部分区 (/internalPartition) - 将指定的源文件编译为 C++ 模块内部分区。
  • 编译为 C++ 标头单元 (/exportHeader) - 将指定的源文件编译为 C++ 标头单元。 默认情况下,扩展名 .h 或无扩展名的文件编译为标头单元。

禁用特定的警告

禁用指定的警告编号。 将警告编号放在以分号分隔的列表中。 设置 /wd<编号>。

强制 Include 文件

指定一个或多个强制包含的文件。 设置 /FI<名称>。

强制 #using 文件

指定一个或多个强制 #using 文件。 设置 /FU<名称>。

显示包含项

生成包含文件的列表及编译器输出。 设置 /showIncludes。

使用完整路径

在诊断消息中使用完整路径。 设置 /FC。

省略默认库名称

指定在文件中省略默认库名称 .obj 。 设置 /Zl。

内部编译器错误报告

注意

此选项已弃用。 从 Windows Vista 开始,错误报告由 Windows 错误报告 (WER) 设置控制。

将特定警告视为错误

将特定编译器警告视为错误,其中 n 是编译器警告。

其他选项

其他选项。