美文网首页
C和C++混合编程

C和C++混合编程

作者: 暮阳晨鼓 | 来源:发表于2019-08-02 11:54 被阅读0次

    extern "C"的作用

    1. extern "C"的真实目的是实现类C和C++的混合编程。extern “C”是由C++提供的一个连接交换指定符号,用于告诉C++这段代码是C函数。extern “C”后面的函数不使用的C++的名字修饰,而是用C。这是因为C++编译后库中函数名会变得很长,与C生成的不一致,造成C++不能直接调用C函数。
    2. C++语言支持函数重载,C语言不支持函数重载。函数被C++编译后在库中的名字与C语言的不同。假设某个函数的原型为:void foo(int x, int y);该函数被C编译器编译后在库中的名字为_foo,而C++编译器则会产生像_foo_int_int之类的名字。C++提供了C连接交换指定符号extern“C”来解决名字匹配问题。
    3. 被extern "C"限定的函数或变量是extern类型的;extern是C/C++语言中表明函数和全局变量作用范围(可见性)的关键字,该关键字告诉编译器,其声明的函数和变量可以在本模块或其它模块中使用。被extern "C"修饰的变量和函数是按照C语言方式编译和连接的。
    4. 与extern对应的关键字是static,被它修饰的全局变量和函数只能在本模块中使用。因此,一个函数或变量只可能被本模块使用时,其不可能被extern “C”修饰。

    extern“C”与__cplusplus

    #ifdef __cplusplus
           extern "C" {
           #endif
           #ifdef __cplusplus
           }
           #endif
    

    注意:Cplusplus(C plus plus)即"C++",用于C++文档的头文件中,上面代码的意思是:如果是C++(*.cpp)后缀,则使用extern “C”,在C++项目中应用的非常广泛。

    应用场合

    1. c++和c之间的互相调用,不管是CPP文件调用C代码,还是C文件调用CPP代码,都可以根据在h文件中添加externC来解决。这个问题的本质在于h文件的作用只是把对应的源文件添加到文件中,因此不管是在CPP还是在C文件。
    2. 在C语言的头文件中,对其外部函数只能指定为extern类型,C语言中不支持extern "C"声明,在.c文件中包含了extern "C"时会出现编译语法错误

    相关文章

      网友评论

          本文标题:C和C++混合编程

          本文链接:https://www.haomeiwen.com/subject/nfdrfqtx.html