将include伪指令合并到一个文件中是一种好习惯

时间:2014-04-07 09:25:36

标签: c++ header-files

我认为一切都在标题中。

假设我们有一个具有这种结构的项目:

+ src
    main.cpp
    task1.cpp
    task2.cpp
+ includes
    main.h
    task1.h
    task2.h

task1.htask2.h都使用<QPushButton><QLabel>

创建其他头文件(core.h)并将此包含放入

是个好主意
// core.h
#include <QPushButton>
#include <QLabel>

然后从每个task1.htask2.h文件中调用它。

这样做时是否有任何变化可以被注意到(编译时间,编程限制......)

2 个答案:

答案 0 :(得分:4)

如果您使用的是“预编译标头”,则只能执行此操作。否则它没有多大意义。

  • 尽可能使用前瞻性声明。
  • 在需要完整声明类型声明的文件中添加包含。

使用包含所有包含文件的头文件使构建系统无法跟踪已更改文件的依赖关系。突然间,您的所有代码都取决于您的core.h标头。如果更改了此标头,则必须重新编译所有代码,即使没有实际更改。

答案 1 :(得分:1)

IMO核心标题是很好的做法:

  • 适用于小型项目;
  • 如果你将它们限制为包含很少改变的东西。

core.h无法很好地扩展到中型或大型项目。这种方法存在一些问题:

  • 当一切都依赖于这个文件中的所有内容时,很难分析或管理依赖关系;
  • 只要该标题中的任何内容发生变化,所有内容都将重新编译;
  • 而不是考虑事物真正属于哪里,程序员只是将事物倾倒在这个文件中;
  • 每个编译单元的命名空间都被该文件中的所有内容污染。