/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

另请参阅

MSVC 编译器选项
MSVC 编译器命令行语法