cpp learning

前面已经说过 C++ 的编译,当源文件编译成目标文件的时候,链接会将这些对象文件合并成一个可执行文件。

当只有一个源文件的时候,自然只生存一个目标文件,但链接过程还会引入库文件,库文件是已经封装好的类或者函数,一般库文件有两种(动态库和静态库),最大的区别就是静态库在链接生成可执行文件的时候引入,而动态库是程序运行的时候,关于库文件以后会讲。

链接过程中,程序可能会报错,有如下原因

  1. 定义相同函数

    如果不同的源文件定义了相同的函数,那么将出错,因为连接器不能区分到底需要定位到哪个函数,解决方案通过删除其中一个函数,或者利用 static 关键字将其局限在源文件中。

  2. 调用未声明的函数

    如果想要避免链接的时候出错,我们可以将函数声明、全局变量声明都放到头文件,当需要用到的时候引入头文件即可,源文件只负责实现。

    C++ 函数默认是声明的(extern),除非加了 {} 进行实现,全局变量声明需要在变量前面加上 extern 。例如

    extern int global;