问题是关于包含一个不必要的头,以避免在子文件中多次调用它。 这里的情况,我有几个文件:C++“额外”头文件
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"
它会破坏另一个文件,这是一个弱解释。包含后的评论很容易提醒其他人。
最让我感兴趣的是如果它会以不好的方式影响编译,那么对象或可执行文件的大小会因此而改变,这会影响性能吗?
或者你有一个很好的解释,为什么这是不好的。
PS:如果您好奇我为什么要这么做,是因为我在映射文件之间的依赖关系,并且做了这样的事情,我可以在所有依赖关系之间创建图形化可视化,从而更容易了解拼图的各个部分如何组合在一起。将子标题传送到较高层级标题中的公共标题将在所有文件之间创建更有组织的结构。
这并没有解决这个问题,但使用'#包括<...>'系统头和'#包括“...”'为自己的头。 –
@佩特贝克尔 - 我不反对,但你应该解释*为什么*。另外,如果你告诉你的编译器关于你自己的包含目录,那么使用“<>”就可以了。在任何情况下,你的评论并没有解释这两种形式之间的差异,而只是说“做这个”,这实际上并没有那么有用。 –
@JesperJuhl - 我会同意,如果这是一个答案。但事实并非如此,而且也不是为了解决这个问题,而是短暂的,而不是为了开始讨论。 –