/Za 编译器选项禁用与 ANSI C89/ISO C90 不兼容的 Microsoft 对 C 语言的扩展,并发出错误。 弃用的 /Ze 编译器选项启用 Microsoft 扩展。 默认情况下将启用 Microsoft 扩展。

不建议在将代码编译为 C++ 时使用 /Za /Ze 选项已弃用,因为其行为默认处于打开状态。 有关已弃用编译器选项的列表,请参阅 已弃用和已删除的编译器选项

Microsoft C/C++ 编译器支持通过两种方式编译 C 代码:

  • 当源文件具有 .c 扩展名或指定 /Tc /TC 选项时,编译器默认使用 C 编译模式。 C 编译器是 C89/C90 编译器,默认允许 Microsoft 对 C 语言的扩展。 有关特定扩展的详细信息,请参阅 适用于 C 和 C++ 的 Microsoft 扩展 。 指定 C 编译和 /Za 选项时,C 编译器严格符合 C89/C90 标准。 编译器将 Microsoft 扩展关键字视为简单标识符,禁用其他 Microsoft 扩展,并自动定义 C 程序的 __STDC__ 预定义宏。

  • 编译器可以在 C++ 编译模式下编译 C 代码。 此行为是指定 /Tp /TP 选项时,没有 .c 扩展名的源文件的默认行为。 在 C++ 编译模式下,编译器支持已纳入 C++ 标准的 ISO C99 和 C11 标准的部分内容。 几乎所有 C 代码也是有效的 C++ 代码。 少量的 C 关键字和代码构造是无效的 C++ 代码,或者用 C++ 以其他方式解释。 在这些情况下,编译器的行为符合 C++ 标准。 在 C++ 编译模式下, /Za 选项可能会导致意外行为,不建议使用该选项。

    其他编译器选项可能会影响编译器确保标准一致性的方式。 有关指定特定标准 C 和 C++ 行为设置的方法,请参阅 /Zc 编译器选项。 有关其他 C++ 标准一致性设置的信息,请参阅 /permissive- /std 编译器选项。

    有关 Visual C++ 一致性问题的详细信息,请参阅 非标准行为

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

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

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

  • 修改“禁用语言扩展”属性

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

    请参阅 DisableLanguageExtensions

    编译器选项
    /Zc(一致性)
    /permissive-(标准符合性)
    /std(指定语言标准版本)

  •