2013-04-07 57 views
1

这个问题是从理想的角度来看的。 //向前声明makefiles和标题依赖关系,重访

我一直在学习makefiles的基础知识,我发现自己想知道与here有关的头文件相关性问题。从实际的角度来看,我很高兴有解决方案可以解决标题依赖问题。然而,考虑一下这个问题,我发现自己问为什么一个头文件依赖将会影响一个编译单元。独占影响编译单元。在假设下(参见前向声明),定义包含在头文件中并且实现以源单位定义,是否有理由修改头文件而不修改相应的源文件?如果不是,那么为什么重新编译依赖源单元更重要,因为定义修改本身对程序执行没有影响?这只是一个问题,可以更快地识别接口定义中的错误?

回答

1

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

“有什么理由,修改头文件是值得的,而不用修改相应的源文件?“

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

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

+0

我没有想过班级规模的情况。如果在类定义更改影响类大小时不考虑头依赖关系,则可能会影响结果可执行文件,如果不是所有相关CU都重新编译的话。谢谢! – jwalk 2013-04-07 17:44:30