9.2.9 语言链接性
另一种形式的链接性--称为语言链接性(language linking)也对函数有影响。首先介绍一些背景知识。链接程序要求每个不同的函数都有不同的符号名。在C语言中,一个名称只对应一个函数,因此这很容易实现。为满足内部需要,C语言编译器可能将spiff这样的函数名翻译为_spiff。这种方法被称为C语言链接性(C language linkage)。但在C++(www.cppentry.com)中,同一个名称可能对应多个函数,必须将这些函数翻译为不同的符号名称。因此,C++(www.cppentry.com)编译器执行名称矫正或名称修饰(参见第8章),为重载函数生成不同的符号名称。例如,可能将spiff(int)转换为_spoff_i,而将spiff(double,double)转换为_spiff_d_d。这种方法被称为C++(www.cppentry.com)语言链接(C++(www.cppentry.com) language linkage)。
链接程序寻找与C++(www.cppentry.com)函数调用匹配的函数时,使用的方法与C语言不同。但如果要在C++(www.cppentry.com)程序中使用C库中预编译的函数,将出现什么情况呢?例如,假设有下面的代码:
它在C库文件中的符号名称为_spiff,但对于我们假设的链接程序来说,C++(www.cppentry.com)查询约定是查找符号名称_spiff_i。为解决这种问题,可以用函数原型来指出要使用的约定:
第一个原型使用C语言链接性;而后面的两个使用C++(www.cppentry.com)语言链接性。第二个原型是通过默认方式指出这一点的,而第三个显式地指出了这一点。
C和C++(www.cppentry.com)链接性是C++(www.cppentry.com)标准指定的说明符,但实现可提供其他语言链接性说明符。