/Zc
(一致性)
使用/Zc
编译器选项指定标准或特定于 Microsoft 的编译器行为。
语法
/Zc:
option{,option ...}
可以在单个 /Zc
编译器选项中用逗号分隔多个 /Zc
选项。 如果在同一命令中启用和禁用 /Zc
选项,则使用最后显示的选项。
注解
当 Visual Studio 实现了与标准不兼容的 C 或 C++ 扩展时,可以使用 /Zc
一致性选项来指定符合标准的行为或特定于 Microsoft 的行为。 对于某些选项,Microsoft 特定的行为是默认行为,以防止对现有代码进行大规模重大更改。 在其他情况下,默认行为是标准行为,其中对安全性、性能或兼容性的改进所产生的成本超过了重大更改的成本。 在较新版本的 Visual Studio 中,每个一致性选项的默认设置可能会更改。 有关每个一致性选项的详细信息,请参阅有关特定选项的文章。 /permissive-
编译器选项隐式设置默认未设置为其符合性设置的一致性选项。
下面是 /Zc
编译器选项:
选项 | 行为 |
---|---|
/Zc:__cplusplus[-] |
启用__cplusplus 宏以报告支持的标准。 默认情况下关闭。 |
/Zc:__STDC__ |
启用__STDC__ 宏以报告支持C标准。 默认情况下关闭。 |
/Zc:alignedNew[-] |
启用 C++17 过度对齐的动态分配。 默认情况下关闭,除非指定/std:c++17 或更高版本。 |
/Zc:auto[-] |
对auto 强制实施新的标准 C++ 含义。 默认已启用。 |
/Zc:char8_t[-] |
启用或禁用 C++20 本机u8 文本支持(如const char8_t )。 默认情况下关闭,除非指定/std:c++20 或更高版本。 |
/Zc:checkGwOdr[-] |
在/Gw 下强制实施标准 C++ ODR 冲突。 |
/Zc:enumTypes[-] |
为enum 类型推导启用标准 C++ 规则。 默认情况下关闭。 |
/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 处理器。 默认情况下关闭,除非指定/std:c++20 或更高版本。 |
/Zc:noexceptTypes[-] |
强制实施 C++17 noexcept 规则。 默认情况下关闭,除非指定/std:c++17 或更高版本。 |
/Zc:nrvo[-] |
启用可选复制并移动省略。 默认情况下关闭,除非指定/O2 、/permissive- 或/std:c++20 或更高版本。 |
/Zc:preprocessor[-] |
使用符合要求的新预处理器。 默认情况下关闭,除非指定/std:c11 或更高版本。 |
/Zc:referenceBinding[-] |
UDT 临时不会绑定到非 const lvalue 引用。 默认情况下关闭,除非指定/permissive- 。 |
/Zc:rvalueCast[-] |
强制实施标准 C++ 显式类型转换规则。 默认情况下关闭,除非指定/permissive- 。 |
/Zc:sizedDealloc[-] |
启用 C++14 全局大小解除分配函数。 默认已启用。 |
/Zc:strictStrings[-] |
禁用字符串文本以char* 或wchar_t* 转换。 默认情况下关闭,除非指定/permissive- 。 |
/Zc:static_assert[-] |
严格处理static_assert 。 默认情况下关闭,除非指定/permissive- 。 |
/Zc:templateScope[-] |
强制实施标准 C++ 模板参数阴影规则。 默认情况下关闭。 |
/Zc:ternary[-] |
对操作数类型强制实施条件运算符规则。 默认情况下关闭,除非指定/permissive- 。 |
/Zc:threadSafeInit[-] |
启用线程安全的本地静态初始化。 默认已启用。 |
/Zc:throwingNew[-] |
假定operator new 失败时引发。 默认情况下关闭。 |
/Zc:tlsGuards[-] |
生成 TLS 变量初始化的运行时检查。 默认已启用。 |
/Zc:trigraphs[-] |
启用三元组(已过时,默认关闭)。 |
/Zc:twoPhase- |
使用不符合要求的模板分析行为(仅在指定/permissive- 时才适用,默认为符合要求)。 |
/Zc:wchar_t[-] |
wchar_t 是本机类型,不是 typedef。 默认已启用。 |
/Zc:zeroSizeArrayNew[-] |
为 0 大小的对象数组调用成员new /delete 。 默认已启用。 |
有关 MSVC 中一致性问题的详细信息,请参阅 Nonstandard Behavior。