c++ - Visual Studio 2010、Intellisense 和 PCH : what are the alternatives to ugly stdafx. h?

标签 c++ visual-studio visual-c++ precompiled-headers

我最近切换到 Visual Studio 2010 并且 Intellisense 在使用 boost 库时不会花半分钟时间显示出来,Microsoft's suggestion似乎使用了预编译的头文件。

除了我以前从未使用过它们(除非被 Ugly ATL Wizards (TM) 强制使用),所以我四处寻找以弄清楚它们是如何工作的。

基本上,Big Centralized stdafx.h 方法似乎完全错误。我从不想在我的所有源代码中包含(甚至便宜)一大堆头文件。因为我不使用 Windows 库(我制作 C++/CLI 更高级别的包装器,然后使用 .NET 与外界对话),所以我没有“一大堆不变的巨大标题”。只是 boost 和散落在各处的标准库头文件。

an interesting approach解决这个问题,但我不太清楚如何完成这项工作。似乎每个源文件都必须编译两次(如果我错了请纠正我):一次使用/Yc,一次使用/Yu。这增加了必须手动调整构建系统的开发人员的负担。

我希望找到一些“为每个源文件自动生成一个预编译头”的技巧,或者至少是一些“最佳实践”,但大多数人似乎很乐意将世界包含在 stdafx.h.

对于每个源文件,我可以使用哪些选项来使用预编译的头文件?我并不真正关心构建时间(只要它们不飙升),我只是希望智能感知快速工作。

最佳答案

对于初学者,您读错了文章。每个文件都不会编译两次。文件 stdafx.cpp 使用/Yc (c,用于创建)在其他任何内容之前编译一次,然后项目中的每个其他文件都使用/Yu (u,用于使用)编译一次,并导入先前创建的保存状态的结果来自 stdafx.cpp。

其次,这篇文章已有 7 年历史,并且在谈论 VC++ 6,所以你应该开始不信任它。但即使假设其中的信息仍然适用于 VC++ 2008 或 2010,这似乎是个坏建议。它推荐使用 /pragma hdrstop 的方法是寻找问题的解决方案。如果您的头文件中包含您不希望在每个文件中包含的内容,那么它们根本不应该出现在您的预编译头文件中。

关于c++ - Visual Studio 2010、Intellisense 和 PCH : what are the alternatives to ugly stdafx. h?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5923310/

相关文章:

c++ - 选择编码和字符串处理

windows - Windows 如何知道 .sln 文件与哪个版本的 Visual Studio 相关?

c# - 编译需要 bindingRedirect 的 C# 库项目

C 中的 Java jbytearray 访问(JNI)

c++ - C++ 编辑并继续功能是否可用于 VC++ 以外的任何东西?

C++程序内存计算

c++ - C++ 中的 std::move 和按引用传递有什么区别?

c++ - 是否有一种可移植/符合标准的方法来获取堆栈跟踪中的文件名和行号?

c++ - VTK图像数据,访问阵列中的1张图像

visual-studio - 为 Windows 8 Metro 和 Windows Phone 设置项目/解决方案的最佳方法是什么?