CC++ 混合编程 互相调用

    xiaoxiao2021-12-14  18

    网上这方面介绍的不少,但是有点鱼龙混杂,对初学者而言,信息量太大,反而不容易直接找到自己想要并且正确的,现将比较好的资料整理下,并附上源代码,供初学者参考以及自己后期使用。

    两个推荐的原文地址,通俗点的: 1.深入理解C/C++混合编程 2.extern “c”用法解析

    C中想调用C++中的成员函数(包括虚函数),则需要提供一个简单的包装(wrapper),参考: 1.C代码中如何调用C++ C++中如何调用C 2.如何用C语言封装 C++的类,在 C里面使用

    1. c调用c++(非成员函数):

    /*c++的头文件:Animal.h*/ #ifndef _ANIMAL_H #define _ANIMAL_H class Animal { public: Animal(char *); ~Animal(); char* getName(); private: char* name; }; //方法1:加上预处理器名字 #ifdef __cplusplus extern "C" { #endif void print(void);//对外接口,而且必须有一个非类中方法,才能被C调用 #ifdef __cplusplus } #endif //方法2:只能在编译C++时才能引用extern "C", extern "C" void print(void); #endif /*cpp文件:Animal.cpp*/ #include "Animal.h" #include <string.h> #include <iostream> using namespace std; Animal::Animal(char* data) { name = new char[32]; strcpy(name, data); } Animal::~Animal() { if(name) { delete []name; name = NULL; } } char * Animal::getName() { return name; } //告诉C+++编译器,按照C的命名规则编译 extern "C" void print(void) { Animal animal("dog"); char* animal_name = animal.getName(); cout<<"animal_name:"<<animal_name<<endl; } /* *c调用c++中的函数 *不能添加#include "Animal.h"(c++的头文件) *以下面形式声明使用的C函数 */ #include <stdlib.h> extern void print(void); int main(void) { print(); system("pause"); }

    2. c++调用c:

    //c的头文件:c_head.h #ifndef _C_HEAD_ #define _C_HEAD_ extern void print(char* ); #endif //c文件:c_file.c #include <stdio.h> #include "c_head.h" void print(char* data) { printf("%s\n",data); } /* *c++调用c函数 *头文件#include "c_head.h"(c的头文件)这样写 */ #include <iostream> extern "C" { #include "c_head.h" } using namespace std; int main(void) { print("hello"); system("pause"); }
    转载请注明原文地址: https://ju.6miu.com/read-962187.html

    最新回复(0)