单头文件,包含所有必需的#include语句

aba*_*azn 4 c c++ header include

我目前正在处理包含大量源文件的程序.有时很难跟踪我已经拥有的库#include.从理论上讲,我可以创建一个单独的头文件Headers.h,它只包含#include我需要的所有语句,然后生成所有其他头文件#include "Headers.h".

为什么这是一个好/坏的主意?

har*_*mic 6

优点:

  • 稍微减少维护,因为您不必跟踪哪些文件包括来自哪些库或其他组件的标头.

缺点:

  • 包含文件中的定义可能会相互冲突.特别是在没有命名空间的C中(用C和C++标记)
  • 特别是宏可能导致难以调试的问题,其中宏定义意外地与文件中的某个名称或其他包含的文件中的某个名称冲突
  • 根据您使用的编译器,编译时间可能会爆炸.如果使用预编译头文件的编译器,它实际上可能会减少编译时间,但如果不是,则会发生相反的情况
  • 您经常会不必要地触发文件的重建.如果您的构建系统设置正确,那么如果修改了任何包含的文件,则会重建每个源文件.如果始终在项目中包含所有标题,则更改任何标题将强制重新编译所有源文件.系统标题不太可能是一个问题,但如果您在主文件中包含自己的标题也是如此.

总的来说,我不建议采用这种方法.上面列出的最后一个特别重要.

最佳做法是仅包含每个文件中代码所需的标头.