【问题标题】:When using precompiled headers should I still include headers where needed?使用预编译的头文件时,我还应该在需要的地方包含头文件吗?
【发布时间】:2012-11-05 20:59:21
【问题描述】:

我想这是一个关于风格而不是正确性的问题。

使用 Visual Studio 2012,我发现使用 windows.h、direct3d11、atlbase 和任何标准 c++ 头文件的预编译头文件比不使用它们时构建项目的速度要快得多。该项目大量使用 Windows,因此根本不需要将任何东西移植到该项目的其他操作系统或编译器。

我的问题是我真的应该包含#include "Precomp.h"之后使用的头文件。他们当然不会做任何事情,因为他们有 header 保护或 #pragma 一次,但他们会帮助记录依赖关系。

在 .h 文件中呢?我不能在其中包含预编译的头文件,但为了使 .h 文件自包含,我总是包含,例如,如果它使用那里的任何东西。但这是不必要的,因为包含此 .h 文件的 .cpp 文件将始终在使用它的 .h 文件之前包含“Precomp.h”文件。

所以这并不是关于正确性,而是关于什么是理解和可维护性的最佳风格。

在这种情况下,预编译头文件的“最佳实践”是什么?

【问题讨论】:

    标签: visual-c++


    【解决方案1】:

    经验法则非常简单:只使用从不更改的标题。所以你只会得到一次缓慢的编译,再也不会。

    这使得 SDK 和编译器头文件成为一个简单的选择。你自己的标题,不是那么多。然后第二条经验法则适用:您是否有自己的标题应该是#included everywhere?它们实际上是否大到足以产生明显的速度差异?无论如何,这几乎总是遭到两次打击。

    【讨论】:

    • 好吧,我只将预编译的头文件用于系统和编译器头文件。问题是我是否将 包含在我自己的 Test.h 中,因为它使用了其中的某些内容,或者仅依赖于 Test.h 已经包含在预编译头文件中的任何内容。通常最好让 .h 文件自包含,但在这种情况下,我知道将始终包含预编译的标头。
    猜你喜欢
    • 1970-01-01
    • 2021-08-09
    • 1970-01-01
    • 1970-01-01
    • 2014-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多