函数链接性和语言链接性

函数链接性

和变量一样,函数也有链接性。

  • 默认情况下,函数具有外部链接性,即可以在文件间共享。实际上,可以在函数原型中使用 extern 来指出函数是在另一个文件中定义的,不过这是可选的。
  • 使用 关键字static 将函数链接性改为内部链接性,使其只能在本文件中使用,必须在原型和函数定义中同时使用该关键字。

语言链接性

  另一种形式的链接性为语言链接性,也对函数有影响。链接程序要求每个不同的函数都具有不同的符号名,在c语言中,一个名称只对应一个函数,因此容易实现,比如,编译器将 spitff( )函数的函数名编译为 _spitff ,这种语言链接性叫做 c语言链接性。而在c++中,函数重载的出现使得多个函数对应同一个函数名称,此时编译器将其翻译为不同的符号名,例如,编译器将 spitff( int )函数的函数名编译为 _spitff_i,而将spitff( double , double )函数的函数名编译为 _spitff_d_d,这叫做c++语言链接性。
  链接程序寻找与c++函数调用匹配的函数时,使用的方法与c 语言不同,但如果要在c++中使用c语言库中预编译的函数,比如调用 spitff(22 ),那么 c 库文件的符号名称为 _spitff ,而在c++中查找的是 _spitff_i,为了解决此问题:
  我们可以在函数原型中显示地声明这种寻找约定:
  

extern "c" void spitff(int);  //显示声明为c链接性
extern void spitff(int);    //默认为c++链接性
extern "c++" void spitff(int);//显示声明为c++链接性
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值