编程语言:C内联函数是否会导致创建弱符号?
在我们的工作中,我们有一个头文件header1.h的项目。这个文件包含一些被声明为外部作用域的函数(通过extern),并且被定义为在同一个头文件(header1.h)中内联。
现在这个文件包含在不同C文件的几个地方。 我的理解是,它会产生一个错误的多重定义与我以前的GCC经验,这就是我所期望的。但在我们的工作中,我们没有得到这些错误。唯一的区别是我们使用不同的编译器驱动程序。
从我过去的经验来看,我所做的最好的猜测是,符号在编译时产生为弱符号,链接器使用这些信息来选择其中的一个。
定义为内嵌结果的函数是否会导致弱符号?这是可能的,还是可能有其他原因。
此外,如果内联可能会导致创建弱符号,是否会有一个功能将其关闭或打开。
无,弱符号是一个GNU扩展和甚至没有在标准AFAIK中定义。 'inline'函数具有特殊的语义,您可以在Stack Overflow上查找某处。 – Downvoter
@Downvoter弱符号是[ELF标准](https://en.wikipedia.org/wiki/Weak_symbol)的一部分:*弱符号表示链接可执行文件和可链接格式(ELF)目标文件时特别注释的符号。 ... * –
@AndrewHenle当然,我的意思是C标准,我忘了写这个。作为ELF标准的一部分,它不是GNU特定的扩展,而是使其实现定义,而与标准无关。 – Downvoter