加载中…
个人资料
夜雨盛唱
夜雨盛唱
  • 博客等级:
  • 博客积分:0
  • 博客访问:41,513
  • 关注人气:13
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

c++知识点--extern "C"的作用

(2011-12-09 16:55:46)
标签:

杂谈

分类: 科技

因为C、C++的编译器对函数名的修饰不同,为了保证在C、C++中编写的函数能够被互相调用,所以采用这个链接指示符

以int func(int, int)为例,C的编译器会将名字改编为_func, 而C++的编译器会改编为_func_int_int 或_funcii(各编译器不同)。

如果这个函数在C中编译成库,目标文件中函数名为_func,当这个函数中C++中被调用时,C++的编译器就会到目标文件中
寻找_funcii,结果找不到,出错。
所以为了防止这种问题,在C++调用时,将函数声明前加个extern "C" 告诉C++的编译器,不要
对名字再进修饰,而直接去找_func。

同样在C++中编译的函数,如果想让C来使用,通常也加上extern "C"在编译时将函数名按C的风格进行修饰。

通常C中编写的函数如果有在其它语言中使用的可能,通常会有下面形式的声明:
#ifdef  __cplusplus

extern "C" {

#endif

 

 

 

#ifdef  __cplusplus

    }

#endif 

即在声明时已经加上extern "C" 而不需要调用时麻烦。例如在VC++中调用C的库函数就不用作特别的声明。

extern "C"的使用要点
1. 可以是单一语句
    extern "C" double sqrt(double);
2. 可以是复合语句, 相当于复合语句中的声明都加了extern "C"
    extern "C" 
   {
      double sqrt(double);
      int min(int, int);
  }
3.可以包含头文件,相当于头文件中的声明都加了extern "C"
   extern "C"
  {
    #i nclude <cmath>
  }
4. 不可以将extern "C" 添加在函数内部
5. 如果函数有多个声明,可以都加extern "C", 也可以只出现在第一次声明中,后面的声明会接受第一个链接指示符的规则。
6. 除extern "C", 还有extern "FORTRAN" 等。

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有