因此,我们使用#include
告诉编译器/链接器在哪里找到类的所有相关代码。
看看这个:
ClassC.h:
#include "ClassA.h";
ClassD.h:
#include "ClassC.h"
假设我们在ClassA
中使用ClassD
,但其方式与ClassC
无关。我们通过包含ClassC
隐式包含它,因此不会抛出任何错误。但是,如果代码更改并且不再需要ClassC
(我们因此删除#include "ClassC.h"
),我们会收到未定义的引用错误,因为ClassA
现在未被引用。
有没有办法让编译器/链接器独立查看每个* .cpp和分配的* .h,而不查看包含的.h文件?
如果是这种情况,它不会调查ClassC.h
并看到它包含ClassA.h
,但会抛出错误或至少发出警告,告诉我我没有包含{{1} }}。这更有意义,因为,就ClassA.h
类而言,ClassD
和ClassA
之间没有任何联系(在设定的假设下我独立使用ClassC
ClassA
)。
我认为以这种方式编写的代码会更稳定,更有弹性。不是吗?
另外,假设我们建立了一个项目,它的确有效。如果我们之前在代码中引用一些类(X)而不是之前引用的类,那么如果它正在使用某些其他类(Y)从程序中该点之间的某个其他源中包含,那么我们可能会收到错误。该类的前一次出现。如果我们捆绑包含更接近于明确使用它的每个头文件,那么这些错误将永远不会出现。
我知道我可以自己跟踪所有这些,但是在大型项目中,即使是中型项目,也会很容易错过一些或更多项目。此外,出现错误/警告会使管理变得更加容易。
我知道我的事情有点复杂,但对我来说这似乎是一个好习惯。
这甚至是一个好主意,可以以某种方式在编译器/链接器选项中设置(例如CodeBlocks中的GNU gcc编译器)吗?
答案 0 :(得分:1)
假设我们在ClassD中使用ClassA,但绝不是这样 连接到ClassC。我们通过包括隐含地包括它 ClassC,所以不会抛出任何错误。但是,如果代码改变了 不再需要ClassC(我们删除#include“ClassC.h” 因为那样,我们会得到未定义的引用错误,因为ClassA是 现在没有参考。
如果您需要在ClassA
中使用ClassD
,请在#include "ClassA.h"
中明确 ClassD.h
。 不依赖隐式包含链。