c++ - C/C++ 中的#include 是多余的吗?

标签 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的依赖项,对吧?这样可以吗?

最佳答案

ClassC.hpp是否需要ClassA.hpp的内容,暂时忽略ClassB.hpp?

如果是这样,那么是的,您应该包含它,而不是依赖可能发生变化的迂回意外包含。检查并设置正确的包含应该相对简单。依赖稍后可能会更改的另一个文件或行为是不好的做法,不应使用。

编辑:在问题适用的继承的情况下,情况有点不同。在这种情况下,您可以依赖需要A的B,并且可以说您不直接依赖A(如果B更改为从Q继承,则C可能不再需要A)。您想要查看 header 或类所依赖的内容,并包含提供该 header 或类的文件。如果它直接依赖于某些东西,请直接包含它。

使用 header 防护可以使多次包含 header 变得无害,并且在较大的代码库中很常见。

关于c++ - C/C++ 中的#include 是多余的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7830601/

相关文章:

构建一个没有 "Makefile.am"的项目,只使用 Autoconf & Autoscan?

makefile - 高工作值(value)的缺点

c++ - 在使用 opencv 的 C++ 中,我有一个 uint 数组转换为灰度图像,只显示灰色屏幕没有图像

c++ - 预先定义可变参数函数指针参数

c - 将多维数组传递给 C 中的函数时出现段错误

c - 分段故障

c++ - C++ std::map 中的 "Uninitialised value was created by a stack allocation"

c++ - C++ 中的 “Undefined symbols” 错误

将 int 数组转换为 char 数组

c++ - makefile 链接不起作用(尽管没有错误消息)