C/C++ 混合编程 互相调用
来源:互联网 发布:mac软件市场 编辑:程序博客网 时间:2024/06/05 00:59
网上这方面介绍的不少,但是有点鱼龙混杂,对初学者而言,信息量太大,反而不容易直接找到自己想要并且正确的,现将比较好的资料整理下,并附上源代码,供初学者参考以及自己后期使用。
两个推荐的原文地址,通俗点的:
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_Hclass Animal{public: Animal(char *); ~Animal(); char* getName();private: char* name;};//方法1:加上预处理器名字#ifdef __cplusplusextern "C" { #endifvoid 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");}
0 0
- C/C++ 混合编程 互相调用
- MATLAB调用C/C++进行混合编程
- c/c++互相调用
- Matlab、C混合编程(Matlab调用C)
- Lua编程之Lua和C之间互相调用方式
- c/c++混合编程
- C/C++混合编程
- C/C++混合编程
- C 汇编混合编程
- C/C++混合编程
- C++&Java混合编程
- C/C++混合编程
- C/C++混合编程
- C/C++混合编程
- C/C++混合编程
- C/C++混合编程
- C/C++混合编程
- C&C++混合编程
- java多线程之生产者消费者经典问题
- 负数在计算机中的转换过程
- ==和equal的区别
- PHPStudy Apache 配置支持HTTPS
- 【拓扑排序算法验证】
- C/C++ 混合编程 互相调用
- java导出Excel并下载
- Some tips for learning English step by step
- Jsch学习笔记(一):Session和线程
- QT下申请消息中的参数类型
- 百度地图添加自定义Marker+显示覆盖层次优先级
- 棒女郎o2o星星家族创始人张文然是如何成为成功人士的
- 让ScrollView失去焦点
- 第十四周项目3—递归的折半查找