欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > c/c++ >内容正文

c/c++

#ifdef __cplusplus 的用法(C语言调用c++代码)(extern “C“)

发布时间:2025/3/20 c/c++ 39 豆豆
生活随笔 收集整理的这篇文章主要介绍了 #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“)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。