IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    C++中extern “c”深层含义

    admin发表于 2011-02-22 09:22:23
    love 0

    extern “C” 代表双重含义:从字面意思上看,一被修饰的目标是extern,二被修饰的目标是C。

    1,首先被extern “C”限定的函数或变量是extern类型的,
    extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器,其声明的函数和变量可以在本模块或其它模块中使用。

    2,被extern “C”修饰的变量和函数是按照C语言方式编译和连接的;

    也就是说C和C++对于编译器来说编译的方式是不同的,作为面向对象程序语言,C++支持函数重载,而C语言不支持函数重载,即某个函数被C++编译器编译后和被C编译器编译后的名字是不同的。例如,函数的原型为:

    void foo(int, int);

    假如C++编译后的名字为:_foo_int_int

    C编译后的名字为:_foo_

    如果在C++中使用C语言提供的库函数时,在引用完头文件后,在链接时,可以无法再目标代码中找到_foo_int_int类似的函数,只能找到_foo_函数,所以会出现函数未定义的错误。

    总的来说一句话:extern “C”的存在时为了C和C++能够进行混合编程。

    关于extern “C” 的用途,请参看我的另一篇文章

    C语言调用C++库接口的方法概述

    参考资料:

    http://www.cppblog.com/Macaulish/archive/2008/06/17/53689.html

    您可能对下面文章也感兴趣:

    • C++插件机制的一种实现方法(对象工厂)
    • scoped_ptr,shared_ptr和weak_ptr用法和实现方法
    • 模板成员函数为什么不能是虚函数
    • C++ Web编程
    • C中宏使用小贴士与小技巧[原创]


沪ICP备19023445号-2号
友情链接