1

这个问题是从理想主义的角度出发的。// 前向声明

我一直在学习 makefile 的基础知识,我发现自己想知道这里问的关于头依赖的同样的事情。从实际的角度来看,我很高兴有解决标头依赖问题的解决方案。然而,再考虑一下这个问题,我发现自己在问为什么头文件依赖会完全影响编译单元。在假设下(见前向声明) 定义包含在头文件中,实现是在源单元中定义的,是否有任何理由在不修改相应源文件的情况下修改头文件?如果不是,为什么重新编译依赖的源单元也很重要,因为单独的定义修改不会影响程序的执行?是否只是尽早而不是稍后识别接口定义更改中的错误的问题?

4

1 回答 1

1

(准确地说,声明包含在头文件中,定义(即实现)位于源文件中,但这只是术语。)

“有什么理由可以修改头文件而不修改相应的源文件?”

是的。例如,将成员从 更改publicprivate。此外,多个源文件可以#include 给定的头文件,因此对头文件的更改可能需要更改其中一个而不是另一个。例如,在类中添加/删除/重命名数据成员可能不需要对类实现进行任何更改,但仍需要更改使用该类的其他源代码。

即使源文件根本没有改变,如果头文件改变了,逻辑上仍然需要重新编译它。例如,添加/删除数据成员会更改类的大小,这意味着任何使用该类实例的代码都必须调整为它们分配的内存量。

于 2013-04-07T16:25:32.163 回答