#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/c++/易语言驱动内存无痕读写源码-包含易语言调用示例代码
c++驱动源码文件目录 易语言调用驱动示例代码 Windows驱动程序是一种特殊的系统程序,它可以访问和控制系统资源,并且不受其他应用程序的限制.它可以获取系统资源,进行更深入的系统控制,包括读取其他 ...
- linux平台下C语言调用python代码示例
首先有三个部分, 1.python代码,名为pyadd.py,代码如下: def add(a=1,b=1):print "*************"print "in ...
- 03_Android NDK中C语言调用Java代码,javah的使用,javap的使用以及生成签名,Android.mk的编写,C代码的编写
1 案例场景,通过C语言回调Java的代码,案例的最终界面: 2 案例的代码结构如下: 3 编写DataProvider的代码: package com.example.ndkcallbac ...
- Linux X64下汇编学习:C语言调用汇编代码,汇编中调用C语言函数
Table of Contents hello world hello.asm makefile float circle_fpu_87c.c circle_fpu_87.asm makefile s ...
- 易语言 执行java_CallJava易语言调用JAVA代码
调试输出 (jvm.创建 (取当前目录 (), "D:\Java\jre\lib")) ' jvm.创建参数解释 ' 用户类路径:即你需要执行的Java文件(字节码文件或者jar) ...
- C语言调用python代码
为什么80%的码农都做不了架构师?>>> //#======================================================== //# aut ...
- “#ifdef __cplusplus extern C { #endif”的定义(zz)
"#ifdef __cplusplus extern "C" { #endif"的定义 看一些程序的时候老是有 "#ifdef __cplusplus ...
- #ifdef __cplusplus extern C { #endif”的定义的含义
看一些程序的时候老是有 "#ifdef __cplusplus extern "C" { #endif"的定义,搞搞清楚是怎么回事: Microsoft-Spe ...
- 第五天2017/04/06(下午1:C、C++混合编程 与 #ifdef __cplusplus extern C{ })
C++.C编译器对函数编译的相关知识:C++支持函数重载,而C不支持,两者的编译规则也不一样.函数被C++编译后在符号库中的名字与C语言的不同.例如,假设某个函数的原型为: void foo( int ...
最新文章
- SAP Spartacus的Lock Focus Directive单元测试实现
- url过滤怎么解除_Shiro-实战(四)---过滤器机制
- 流水线合成材料依赖表的生成算法
- 第3章2节《MonkeyRunner源码剖析》脚本编写示例: MonkeyDevice API使用示例(原创)
- JSON DATE 转换标准的一些资料(收集)
- C# winform以阅览模式打开PPT,并控制PPT上下页,轮播
- 通讯录获取源码_[源码和文档分享]基于Java语言的C/S模式通讯录备份和查询软件...
- 蓝牙 - 注册SIG账号
- Protel DXP2004 中文版 下载及安装
- std::result_of用法
- day1------安装部署k8s之完成(3)
- hello world (android studio DNK )
- Maven读书笔记之六(仓库)
- tab weui 页面切换_weui 多网页切换效果分析
- 点集拓扑学思维导图(附pdf源文档)
- 为什么北半球的旋涡都是逆时针的
- 攻防世界-warmup详解
- 问题 A: 【二维数组】计算三阶行列式的值
- 云栖科技评论第70期:数字时代需要双螺旋
- openstack是啥子
热门文章
- 读书笔记:黑客与画家
- sqlserver2008未将对象引用设置到对象的实例_面试官:ThreadLocal 的内存泄漏是弱引用导致的,你确定?...
- python3标准库书怎么样_Python3标准库:filecmp比较文件
- VF01 BAPI :BAPI_BILLINGDOC_CREATEMULTIPLE
- SD-销售订单中装运点确认
- SAP在快速消费品行业中的实施方案
- SAP系统内部顾问如何培养
- BAP 使用DYNP_VALUES_READ来获取屏幕字段值
- 你所记得的一切 All you remember
- HANA全面上市,成为SAP史上用户数量增长最快的产品之一