扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
如果引用多个,那么就如下所示
创新互联建站专注于苍南网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供苍南营销型网站建设,苍南网站制作、苍南网页设计、苍南网站官网定制、小程序定制开发服务,打造苍南网络公司原创品牌,更为您提供苍南网站排名全网营销落地服务。
extern “C”{
#include “ s.h”
#include “t.h”
#include “g.h”
#include “j.h”};
然后在调用这些函数之前,需要将函数也全部声明一遍。2.
C++调用C函数的方法,将用到的函数全部重新声明一遍
extern “C”{
extern void A_app(int);
extern void B_app(int);
extern void C_app(int);
C++语言支持函数重载,C语言不支持函数重载。函数被C++编译后在库中的名字与C语言的不同。假设某个C 函数的声明如下:
void foo(int x, int y);
该函数被C 编译器编译后在库中的名字为_foo,而C++编译器则会产生像_foo_int_int之类的名字用来支持函数重载和类型安全连接。由于编译后的名字不同,C++程序不能直接调用C 函数。C++提供了一个C 连接交换指定符号extern“C”来解决这个问题。例如:
extern “C”{
void foo(int x, int y);
// 其它函数}或者写成
extern “C”{
#include “myheader.h”
// 其它C 头文件}
这就告诉C++编译译器,函数 foo 是个C 连接,应该到库中找名字_foo 而不是找_foo_int_int。
调用系统的是
#include ****** //如果是vc6 才是*****.h; 更高版本编译器是不加 点h 的
调用自己写的头文件是
#include " "
函数库是
pragma *.lib
如果是标准库函数, 都已经封装好了,直接引用对应头文件, 调用即可
如果是自己写的C文件, 调用的时候 需要加上extern "C"声明
首先,要在C++的函数前面加extern
"C",这样的函数才能被其他语言调用。当然还得要求形参类型和返回类型都是C语言支持的类型。
其次,在把两种语言的.o文件链接在一起的时候,gcc要加选项-lstdc++。
祝你成功!
有类没关系,只要你这个要引出的函数不是类里面的函数,就可以供C语言程序调用。
,但是具体还是有些差别的。 先对C中调用C++代码作个简单回顾:1、对于C++中非类的成员函数,可以简单的在 函数声明前面加extern C ,通常函数声明位于头文件中,当然也可以 将声明和函数定义一起放在cpp中 ,在没有声明的情况下,直接在定义前添加extern C也可2、对于C++类的成员函数,则 需要另外做一个cpp文件,将需要调用的函数进行包装。 要实现C++中调用C的代码,具体操作:对于C中的函数代码,要么将C代码的头文件进行修改,在其被含入C++代码时在声明中加入extern C或者在C++代码中重新声明一下C函数,重新声明时添加上extern C头。 通过以上的说明,我明白一点,那就是加extern C头一定是加在C++的代码文件中才能起作用的。 下面分析一下这个现象的实质原因:C编译器编译函数时不带函数的类型信息,只包含函数符号名字,如C编译器把函数 int a(float x)编译成类似_a这样的符号,C连接器只要找到了调用函数的符号,就可以连接成功,它假设参数类型信息是正确的,这是C编译连接器的缺点。而C++编译器为了实现函数重载,编译时会带上函数的类型信息,如他把上面的a函数可能编译成_a_float这样的符号为了实现重载,注意它还是没有带返回值得信息,这也是为什么C++不支持采用函数返回值来区别函数重载的原因之一,当然,函数的使用者对函数返回值的处理方式(如忽略)也是重要原因。 基于以上,C调用C++ ,首先需要用封装函数把对C++的类等的调用封装成C函数以便C调用,于是extern "C"的作用是:让编译器知道这件事,然后以C语言的方式编译和连接封装函数(通常是把封装函数用C++编译器按C++方式编译,用了extern "C"后,编译器便依C的方式编译封装接口,当然接口函数里面的C++语法还是按C++方式编译;对于C语言部分--调用者,还是按C语言编译
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流