问题是关于包含一个不必要的头文件以避免在子文件中多次调用它。
情景如下,我有几个文件:
现在,我想要做的是从所有显示的.cc文件中删除
由于所有的.cc相关头文件都包含了srinterface.h,因此srlogger.h也会被覆盖。那么,这样做为什么不好呢?
请不要只说您应该只包括编译所需的必要头文件,而不包括任何额外的内容,这并不足够解释。
我想知道在实际例子中为什么这样做是不好的。
如果有人从srinterface.h中删除#include "srlogger.h",它将破坏其他文件,这是一个薄弱的解释。在include之后添加注释可以轻松警告其他人。
最让我感兴趣的是它是否会对编译产生不良影响,对象或可执行文件的大小是否会因此改变,它是否会影响性能。
或者你有一个非常好的解释为什么这样做不好。
PS:如果你好奇为什么我要这样做,是因为我正在映射文件之间的依赖关系,这样做我可以创建一个图形化可视化工具来展示所有依赖关系,更容易理解各个部分如何相互配合。将子头文件转移到高层次头文件中的公共头文件可以在所有文件之间创建更有组织的结构。
srlogger.h
srinterface.h
srinterface.cc
#include <srinterface.h>
#include "srlogger.h"
srbinhttp.h
#include "srinterface.h"
srbinhttp.cc
#include <srbinhttp.h>
#include "srlogger.h"
srsocket.h
#include "srinterface.h"
srsocket.cc
#include <srsocket.h>
#include "srlogger.h"
srhttp.h
#include "srinterface.h"
srhttp.cc
#include <srhttp.h>
#include "srlogger.h"
现在,我想要做的是从所有显示的.cc文件中删除
#include "srlogger.h"
,并将其改为在srinterface.h
文件中包含它:srinterface.h
#include "srlogger.h"
由于所有的.cc相关头文件都包含了srinterface.h,因此srlogger.h也会被覆盖。那么,这样做为什么不好呢?
请不要只说您应该只包括编译所需的必要头文件,而不包括任何额外的内容,这并不足够解释。
我想知道在实际例子中为什么这样做是不好的。
如果有人从srinterface.h中删除#include "srlogger.h",它将破坏其他文件,这是一个薄弱的解释。在include之后添加注释可以轻松警告其他人。
最让我感兴趣的是它是否会对编译产生不良影响,对象或可执行文件的大小是否会因此改变,它是否会影响性能。
或者你有一个非常好的解释为什么这样做不好。
PS:如果你好奇为什么我要这样做,是因为我正在映射文件之间的依赖关系,这样做我可以创建一个图形化可视化工具来展示所有依赖关系,更容易理解各个部分如何相互配合。将子头文件转移到高层次头文件中的公共头文件可以在所有文件之间创建更有组织的结构。
#include <...>
,对于自己的头文件使用#include "..."
。 - Pete Becker