编程语言:C
在我们的工作中,我们有一个项目,其头文件称为header1.h。此文件包含一些声明为外部作用域的函数(通过extern),并在同一个头文件(header1.h)中定义为内联。
现在,此文件包含在不同C文件中的多个位置。 我的理解是,随着我过去GCC的经验,它会产生多个定义的错误,这就是我的期望。但在我们的工作中,我们没有得到这些错误。唯一的区别是我们使用不同的编译器驱动程序。
根据我过去的经验,我所做的最好的猜测是,在编译时符号被生成为弱符号,链接器正在使用该信息来选择其中一个符号。
定义为内联的函数是否会导致弱符号?是否可能,或者可能还有其他原因。
此外,如果内联可能导致创建弱符号,那么是否有一个功能可以将其关闭或打开。
答案 0 :(得分:1)
如果函数是内联函数,则每次使用函数时都会复制整个函数体(而不是正常的汇编程序调用/返回语义)。
(现代编译器,使用内联作为提示,实际结果可能只是一个静态函数,在每个使用的编译文件中都有一个唯一的副本)