- 现在链接的主要焦点是找到每个符号和函数在哪里。
- 每个文件被编译成一个单独的目标文件
- 一个翻译单元,它们彼此之间没有关系
- 所以如果我们决定把我们的程序分割成多个C+文件
- 即使只有一个文件,也许知道入口在哪main函数
- 这时编译没有问题,但是build链接会出问题
- entry point must be defined,每个阶段会报每个阶段的错误,比如C开头的就是编译的错误,LINK开头的就是链接的错误
- 程序入口也不一定是main函数,可以手动设定
- 如果只在一个文件中调用这个函数,可以加上 static符号
- 这样就在本文件中不适用Multiply就不会链接
二义性匹配
-
有时两个函数都引用了log.h,又因为log.h就是简单的复制,所以会出二义性的错误,这是加上static修饰就能保证,log函数在链接时的局部性质
-
还可以使用inline,这意味着直接替换
将
变为
或者(放到其中一个翻译单元中,这样也没有二义性)