c++与c语言的相互调用方法,C函数和C++函数相互调用

实例解说

这个例子,示例了两点

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

int call_MyMath_sum (int, int); // 此函数定义在main.cpp中

int sum(int a , int b) {

return call_MyMath_sum(a,b);

}

C++语言中的函数:

main.cpp

# include

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<

}

如何编译:

# 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值