当导师入门级程序员时,我被问到这个问题,我正在考虑这个官方和通常的编译+链接过程,我从来没有想过为什么.
我能想到的一件事是提高开发效率,但是还有其他更多与编译器相关的原因吗?
效率.编译程序时,为每个源文件创建一个目标文件,如果更改源文件,则只需重新编译该模块然后重新链接(重新链接很便宜).如果编译器在一次传递中完成所有操作,则必须为每次更改重新编译所有内容.
它也符合unix的小程序理念,它可以做一件事,所以你有一个预处理器,一个编译器,一个链接器,一个库创建者.这些步骤现在可能是同一工具的不同模式.
但是有理由说你希望编译器在一个步骤中链接,如果允许编译器在链接时更改目标文件,你可以做一些优化 - 大多数现代编译器允许这样做,但它需要它们将额外的信息放入编译时的目标文件.
如果编译器可以将整个项目存储在单个数据库中,而不是混乱的源,资源,浏览信息文件,目标文件等,那会更好 - 但开发人员非常保守!