这个问题是从理想主义的角度出发的。//前向声明
我一直在学习 makefile 的基础知识,我发现自己想知道被问到的同样问题 here关于 header 依赖项。从实际的角度来看,我很高兴有解决 header 依赖性问题的解决方案。然而,仔细考虑这个问题,我发现自己在问为什么 header 依赖项会排他性地影响编译单元。假设(参见前向声明)定义包含在头文件中,实现在源单元中定义,是否有任何理由认为修改头文件而不修改相应的源文件是值得的?如果不是,为什么重新编译相关源单元甚至很重要,因为单独的定义修改不会影响程序执行?这只是一个尽早发现接口(interface)定义更改错误的问题吗?
最佳答案
(准确地说,声明包含在头文件中,定义(即实现)包含在源文件中,但这只是术语。)
"Is there any reason that modification to a header file is merited without modification to the respective source file?"
是的。例如,将成员从 public
更改为 private
。此外,多个源文件可以 #include 一个给定的头文件,因此对头文件的更改可能需要更改其中一个而不是另一个。例如,在类中添加/删除/重命名数据成员可能不需要对类实现进行任何更改,但仍需要更改使用该类的其他源代码。
即使源文件根本没有改变,如果头文件发生改变,逻辑上仍然有必要重新编译它。例如,添加/删除数据成员会改变类的大小,这意味着任何使用该类实例的代码都必须调整为其分配的内存量。
关于c++ - 重温 makefile 和 header 依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15864412/