C / C ++中的冗余#include?

时间:2011-10-20 02:51:48

标签: c++ c makefile cmake qmake

假设现在我有三个源文件:ClassA.hpp,ClassB.hpp和ClassC.hpp。

ClassB继承自ClassA,而ClassC继承自ClassB。

所以,在ClassB.hpp中,我写了#include“ClassA.hpp”。 那么,在ClassC.hpp中,除了包括ClassB.hpp之外,还应该包括ClassA.hpp?

在编写Makefile时,我应该将ClassA.o作为ClassC.o的依赖吗? 在cmake中 - 如果我不在ClassC.hpp中编写#include“ClassA.hpp”,ClassA.o将不会是ClassC.o的依赖,对吧?那可以吗?

2 个答案:

答案 0 :(得分:5)

ClassC.hpp是否需要ClassA.hpp的内容,暂时不考虑ClassB.hpp?

如果是这样,那么是的,你应该包括它而不是依赖于可能改变的围绕意外包含。检查并设置正确的包含应该相对简单。依赖可能在以后更改的其他文件或行为是不好的做法,不应该使用。

编辑 在继承的情况下,问题适用,事情有点不同。这是可以依赖B需要A的情况,可以说你不直接依赖A(如果B改为继承Q,C就不再需要A)。您希望查看标头或类所依赖的内容,并包含提供该文件的文件。如果它直接依赖于某些东西,请直接包含它。

使用标题保护可以使多次包含标题变得无害,并且在较大的代码库中非常常见。

答案 1 :(得分:0)

关于make,ClassC.o不应该依赖于ClassA.o。它应该依赖于ClassA.hpp,即使它是通过ClassB.hpp间接包含的,也会生成它。

如果ClassB.hpp依赖于ClassA.hpp中定义的内容,我希望ClassB.hpp显式包含ClassA.hpp。我觉得它更干净。

相关问题