我在指导一个入门级程序员时被问到这个问题,我一直在想这个编译+链接过程是如此正式和平常以至于我从来没有想过为什么。
我能想到的一件事是提高开发效率,但是否还有其他更多与编译器相关的原因?
最佳答案
效率。 当你编译一个程序时,你为每个源文件创建了一个目标文件,如果你改变了一个源文件,你只需要重新编译那个模块然后重新链接(重新链接很便宜)。 如果编译器一次完成所有操作,则每次更改都必须重新编译所有内容。
它也符合 unix 小程序只做一件事的哲学,所以你有一个预处理器、一个编译器、一个链接器、一个库创建器。这些步骤现在可能是同一工具的不同模式。
然而,您希望编译器在一步中进行链接是有原因的,如果您允许编译器在链接时更改目标文件,则可以进行一些优化 - 大多数现代编译器都允许这样做,但它要求它们添加额外的在编译时将信息写入目标文件。
如果编译器可以将整个项目存储在一个数据库中,而不是源代码、资源、浏览信息文件、目标文件等的困惑状态,那就更好了——但开发人员非常保守!
关于c++ - 为什么构建C++代码时编译+链接,而不是直接生成可执行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3024110/