zoukankan      html  css  js  c++  java
  • C and C++ 如何嵌套使用

    1. 要知道extern "C"的含义:

    (1)  extern是C/C++中表明函数和全局变量作用范围的关键字, 该关键字表明其申明的函数和变量可以在本模块或者其他模块中使用。

    (2)  “C” 

        为了使的C/C++遵守同一个编译和链接的约定。

        例如:指定strcpy()根据c的编译和链接方法,extern "C" char* strcpy(char *, const char*);

    (3) extern 是一个申明,而不是定义一个变量

     extern “C”表示按照c的方式进行编译和链接;

    2. c++的编译和链接方法:

    (1)c++的重载: 例如void print(int i);   void print(char c); 被编译为,_print_int(int i), _print_char(char c )

             所以在调用print(3)时实际上会查找_print_int(3)函数来执行

    (2)c中没有重载的,所以只会将print函数编译成_print()

    这就是为什么要在c++中用extern “C” 来调用外部的c函数

    3. c和c++互相调用的实例:

    (1)c++中调用c

        a。 在c中要加上extern的关键字:

    //cheader.h
    extern
    void print(int i);
    //cheader.c
    
    #include "cheader.h"
    
    void print(int i)
    {
        printf("test");
    }    

        b.在c++中要用extern "C"来引用c中的函数

    extern "C" {
           #include "cheader.h"
    }
    
    int main(int argc, char *argv){
            print(3);
            return 0;   
    }

    (2)在c中调用c++代码

    a。在 c++的头文件.h中定义

      extern "C" void print(int i);

        .cpp中

        #include "cpp.h"

        using namespace std;

        void print(int i)

        {...}

    b. 在c中调用:

        extern void print(int i );

        int main(){print(3);}

    总之是:在c++代码中用extern “C”  , 在c代码中extern

  • 相关阅读:
    不同等级数据源的多级缓冲环的生成
    从DataTable到List<Model>(C#.net)
    string与char之间的转换以及如何获得string所占位数
    AndroidKotlin
    Android高级POS开发
    IOS 应用开发
    Android切屏的处理
    Android POS开发
    Android深入理解JNI
    Android的IPC机制Binder
  • 原文地址:https://www.cnblogs.com/bubbler/p/3896182.html
Copyright © 2011-2022 走看看