gpt4 book ai didi

c++ - 如何在 VS2017 中编译一个不带/Za 的文件(其余带/Za)?

转载 作者:搜寻专家 更新时间:2023-10-31 00:53:58 24 4
gpt4 key购买 nike

我希望能够在没有 Microsoft 语言扩展恶作剧的情况下编译我的 VS2017 C++ 项目。

根据此处的回复,/Za compiler directive does not compile system headers in VS2010 , 有没有办法让 VS 编译一个不带/Za 的文件,而其余的带?

特别不喜欢/Za 标志的文件是 Winnt.h,我的几个文件正在使用它。

最佳答案

这比我意识到的要简单得多。

  1. 在解决方案资源管理器中右键单击项目,转到属性 -> C\C++ -> 语言 -> 禁用语言扩展 -> 是 (/Za)
  2. 点击确定。

现在您添加的任何新文件都将使用/Za。

  1. 按住 Shift 键并选择您需要使用/Za 的所有文件。
  2. 重复第 1 步,只是现在将“禁用语言扩展”设置为“否”。

现在只有那些文件会使用 Microsoft 的语言扩展构建。

无需处理 vcxproj 编辑(以及它创建的过滤器麻烦),无需设置文件以停止从项目默认值继承,无需使用/Ze 或/Zc 或任何手动命令行 jimmying。我浪费了多少时间没有意识到这有多么简单。 >_<

一些其他注意事项:感谢此处的建议以及插入和拉动各种杠杆,我发现了以下内容:

  • /permissive- 命令行选项,在 Visual C++ Team Blog 上讨论(感谢 Jodocus)显然做了我需要的。但是我发现它根本没有捕捉到匿名结构,所以也许我做错了什么但它并没有强制我的代码符合 ISO C++。

  • /Zc compiler options不要提到匿名结构,所以如果其中一个捕获到不符合要求的匿名结构,我无法分辨是哪个。由于这是 ISO C++ 中的一件事,我找不到明确涵盖的内容,因此我也对这些标志失去了信心。

  • 如果有问题的文件是头文件,您必须为包含该有问题的头文件的每个源文件禁用/Za。

  • 最后,这也可以通过编程来完成。参见 DisableLanguageExtensions .

关于c++ - 如何在 VS2017 中编译一个不带/Za 的文件(其余带/Za)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46888545/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com