#ifdef __cplusplus 的用法(C语言调用c++代码)(extern “C“)
生活随笔
收集整理的这篇文章主要介绍了
#ifdef __cplusplus 的用法(C语言调用c++代码)(extern “C“)
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
#ifdef __cplusplus //注意__cplusplus是C 编译器的保留宏定义.就是说C 编译器认为这个宏已经定义了,一定要完全一样,否则会出问题
extern "C"{
#endif//函数接口声明#ifdef __cplusplus}
#endif
告知从编译器这是c++代码
上述解释可能有误,看看就好
20211227
extern "C"是c++的符号,只有c++认识,c不认识
如果有C语言写的函数dofunc(),c++想调用它,只需在c++文件里这样,告诉c++编译器这是用c写的函数,编译器就会按照c的风格来编译:
extern "C" { int dofunc(); }int main(int argc , char* args[]) {dofunc();system("pause"); }但通常是使用引入c文件对应的头文件的方式,但如果在c头文件里写上extern “C”,c语言去引用的时候就认不识了,所以还得在头文件里加上判断语句#ifdef __cplusplus,这样如果是被c++文件引用的话,extern "C"就会生效,否则extern "C"不生效,这就是c++如何引入c接口的方法
#ifdef __cplusplus extern "C"{ #endif//函数接口声明#ifdef __cplusplus} #endif那么c如何调用c++的接口呢?看了网上一些答案,也还不能太好理解,但是我们已经有现成案例,比如c嗲用yolo.cc中的c++函数,在yolo.h里写:
yolo.h
#ifndef _RKNN__KY_YOLO_H_ #define _RKNN__KY_YOLO_H_#ifdef __cplusplus extern "C" { #endifbool yolo_process_image();void yolo_draw_objects();#ifdef __cplusplus } #endif#endif //_RKNN__KY_YOLO_H_跟c++调用c接口竟然是一样的
参考文章1:C++调用C语言的库函数
参考文章2:C调用C++(C++封装以及C对其调用)
参考文章3:C中如何调用C++函数
总结
以上是生活随笔为你收集整理的#ifdef __cplusplus 的用法(C语言调用c++代码)(extern “C“)的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: C语言system函数(C语言程序中执行
- 下一篇: C/C++ 为什么#ifndef 头文件