#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“)相关推荐

  1. c/c++/易语言驱动内存无痕读写源码-包含易语言调用示例代码

    c++驱动源码文件目录 易语言调用驱动示例代码 Windows驱动程序是一种特殊的系统程序,它可以访问和控制系统资源,并且不受其他应用程序的限制.它可以获取系统资源,进行更深入的系统控制,包括读取其他 ...

  2. linux平台下C语言调用python代码示例

    首先有三个部分, 1.python代码,名为pyadd.py,代码如下: def add(a=1,b=1):print "*************"print "in ...

  3. 03_Android NDK中C语言调用Java代码,javah的使用,javap的使用以及生成签名,Android.mk的编写,C代码的编写

     1  案例场景,通过C语言回调Java的代码,案例的最终界面: 2  案例的代码结构如下: 3 编写DataProvider的代码: package com.example.ndkcallbac ...

  4. Linux X64下汇编学习:C语言调用汇编代码,汇编中调用C语言函数

    Table of Contents hello world hello.asm makefile float circle_fpu_87c.c circle_fpu_87.asm makefile s ...

  5. 易语言 执行java_CallJava易语言调用JAVA代码

    调试输出 (jvm.创建 (取当前目录 (), "D:\Java\jre\lib")) ' jvm.创建参数解释 ' 用户类路径:即你需要执行的Java文件(字节码文件或者jar) ...

  6. C语言调用python代码

    为什么80%的码农都做不了架构师?>>>    //#======================================================== //# aut ...

  7. “#ifdef __cplusplus extern C { #endif”的定义(zz)

    "#ifdef __cplusplus extern "C" { #endif"的定义 看一些程序的时候老是有 "#ifdef __cplusplus ...

  8. #ifdef __cplusplus extern C { #endif”的定义的含义

    看一些程序的时候老是有 "#ifdef __cplusplus extern "C" { #endif"的定义,搞搞清楚是怎么回事: Microsoft-Spe ...

  9. 第五天2017/04/06(下午1:C、C++混合编程 与 #ifdef __cplusplus extern C{ })

    C++.C编译器对函数编译的相关知识:C++支持函数重载,而C不支持,两者的编译规则也不一样.函数被C++编译后在符号库中的名字与C语言的不同.例如,假设某个函数的原型为: void foo( int ...

最新文章

  1. SAP Spartacus的Lock Focus Directive单元测试实现
  2. url过滤怎么解除_Shiro-实战(四)---过滤器机制
  3. 流水线合成材料依赖表的生成算法
  4. 第3章2节《MonkeyRunner源码剖析》脚本编写示例: MonkeyDevice API使用示例(原创)
  5. JSON DATE 转换标准的一些资料(收集)
  6. C# winform以阅览模式打开PPT,并控制PPT上下页,轮播
  7. 通讯录获取源码_[源码和文档分享]基于Java语言的C/S模式通讯录备份和查询软件...
  8. 蓝牙 - 注册SIG账号
  9. Protel DXP2004 中文版 下载及安装
  10. std::result_of用法
  11. day1------安装部署k8s之完成(3)
  12. hello world (android studio DNK )
  13. Maven读书笔记之六(仓库)
  14. tab weui 页面切换_weui 多网页切换效果分析
  15. 点集拓扑学思维导图(附pdf源文档)
  16. 为什么北半球的旋涡都是逆时针的
  17. 攻防世界-warmup详解
  18. 问题 A: 【二维数组】计算三阶行列式的值
  19. 云栖科技评论第70期:数字时代需要双螺旋
  20. openstack是啥子

热门文章

  1. 读书笔记:黑客与画家
  2. sqlserver2008未将对象引用设置到对象的实例_面试官:ThreadLocal 的内存泄漏是弱引用导致的,你确定?...
  3. python3标准库书怎么样_Python3标准库:filecmp比较文件
  4. VF01 BAPI :BAPI_BILLINGDOC_CREATEMULTIPLE
  5. SD-销售订单中装运点确认
  6. SAP在快速消费品行业中的实施方案
  7. SAP系统内部顾问如何培养
  8. BAP 使用DYNP_VALUES_READ来获取屏幕字段值
  9. 你所记得的一切 All you remember
  10. HANA全面上市,成为SAP史上用户数量增长最快的产品之一