C函数和C++函数相互调用
2016-01-15 09:11
253 查看
实例解说
这个例子,示例了两点C 如何调用C++对象里的函数
C++ 如何调用C的函数
共两个文件,test.c 和 main.cpp,代码解释如下:
在main.cpp (C++ 代码) 里定义了一个类MyMath,类里有个成员函数sum ;如何让C能调用这个c++的函数MyMath::sum呢?
即在main.cpp 中添加extern C后,声明定义一个C的函数call_MyMath_sum。在test.c 中先声明这个函数,然后通过调用call_MyMath_sum,达到调用C++
MyMath::sum的作用。
在test.c 中,定义了一个sum 的函数。如何让C++能调用这个c的函数sum呢? 这么做的,在main.cpp中 extend “C” 后声明它,然后在main函数中直接调用就可以了。
代码有点绕,C和C++调来调去的,不过仔细看就容易明白。
起关键作用的就是 extent “C” 这个关键语句,它的作用是告诉C++编译器,把后面的语句当作C语言进行处理。
代码如下
C语言中的函数,其中调用了C++中的call_MyMath_sum:test.c
[code]int call_MyMath_sum (int, int); // 此函数定义在main.cpp中 int sum(int a , int b) { return call_MyMath_sum(a,b); }
C++语言中的函数:
main.cpp
[code]# include <iostream> using namespace std; extern "C" { int sum(int , int); // 声明sum函数,已经在test.c 中定义过 } class MyMath { public : static int sum(int , int); }; int MyMath::sum(int a, int b) { return (a + b); } extern "C" int call_MyMath_sum (int a , int b) { // 定义call_MyMath_sum , 使其可以被c的代码调用 return (MyMath::sum(a,b)); } int main(void) { cout< <sum(5,6); return 0; // 此sum是 在test.c中定义的 }
如何编译:
[code]# Makefile main.o: g++ -c -o main.o main.cpp # 注意是g++ test.o: gcc -c -o test.o test.c # 注意是gcc main: main.o test.o g++ -o main main.o test.o # 最后链接用的是g++ all: main clean: rm -f test.o main.o
执行 make 得到可执行文件main
FROM: http://it.zuocheng.net/c-cpp-mix-programe
相关文章推荐
- c++实现精确计时
- C++调用C函数
- C++中调用C程序的方法(转)
- C++笔记
- C语言去除字符串首尾空格,trim()函数实现
- 一起talk C栗子吧(第十二回:C语言实例--单链表一)
- 《C语言及程序设计初步》第35讲实践项目
- vc++6.0工具栏自绘按钮程序
- C语言括号匹配问题
- C++编程 –安全并发访问容器元素
- C++数学计算库
- c/c++中文件的操作大全,可以了解向文件读取一个结构体
- sizeof
- c++函数概念
- constexpr讲解--C++11
- C++ 模板与泛型编程
- C++ 中计算数组长度
- 传统线程调用
- 一起talk C栗子吧(第一百零一回:C语言实例--使用信号量进行进程间同步与互斥二)
- const限定符和constexpr说明符--C++11