/Zc:wchar_t(wchar_t 是本机类型)

根据 C++ 标准将 wchar_t 分析为内置类型。

语法

/Zc:wchar_t[-]

注解

如果 /Zc:wchar_t 处于打开状态,则 wchar_t 是编译为 C++ 的代码中的内置整型类型的一个关键字。 如果指定了 /Zc:wchar_t-(带减号),或在编译为 C 的代码中,则 wchar_t 不是内置类型。 相反,wchar_t 在规范标头 stddef.h 中被定义为 unsigned shorttypedef。 (Microsoft 实现在 stddef.h 包含的另一个标头以及其他标准标头中定义它。)

不建议使用 /Zc:wchar_t-,因为 C++ 标准要求 wchar_t 是内置类型。 使用 typedef 版本可能导致可移植性问题。 如果是从早期版本的 Visual Studio 升级,遇到编译器错误 C2664(因为代码尝试将 wchar_t 隐式转换为 unsigned short),建议更改代码来修正错误,而不是设置 /Zc:wchar_t-。

/Zc:wchar_t 选项在 C++ 编译中默认处于打开状态,在 C 编译中则被忽略。 /permissive- 选项不会影响 /Zc:wchar_t。

Microsoft 将 wchar_t 作为两位无符号值实现。 它将映射到 Microsoft 专用本机类型 __wchar_t。 有关 wchar_t 的详细信息,请参阅数据类型范围基本类型

如果你编写了一个新代码,该代码必须与仍使用 typedef 版本的 wchar_t 的旧代码互操作,则可为 wchar_tunsigned short__wchar_t 变体提供重载,以便让新代码与使用/未使用 /Zc:wchar_t 编译的代码链接。 否则,必须提供两个不同版本的库(一个启用了 /Zc:wchar_t,另一个未启用)。 即使在这种情况下,仍建议你使用用来编译新代码的同一编译器来生成旧代码。 不要将使用不同编译器编译的二进制文件混合。

指定 /Zc:wchar_t 时,将定义 _WCHAR_T_DEFINED 和 _NATIVE_WCHAR_T_DEFINED 符号。 有关更多信息,请参见 Predefined Macros

当你的代码使用编译器 COM 全局函数时,由于默认情况下 /Zc:wchar_t 处于打开状态,建议你将对 comsupp.lib 的显式引用更改(通过注释 pragma或命令行)为对 comsuppw.lib 或 comsuppwd.lib 的显式引用。 (如果必须使用 /Zc:wchar_t- 进行编译,则使用 comsupp.lib。)如果包含了 comdef.h 头文件,则会为你指定正确的库。 有关编译器 COM 支持的信息,请参阅编译器 COM 支持

编译 C 代码时不支持 wchar_t 内置类型。 有关 Visual C++ 一致性问题的详细信息,请参阅非标准行为

在 Visual Studio 开发环境中设置此编译器选项

  1. 打开项目的“属性页” 对话框。 有关详细信息,请参阅在 Visual Studio 中设置 C++ 编译器和生成属性

  2. 选择“配置属性”>“C/C++”>“语言”页。

  3. 修改“将 wchar_t 视为内置类型”属性。

以编程方式设置此编译器选项

另请参阅

/Zc(一致性)