C++和C是两种完全不同的编译链接处理方式,如果直接在C++里面调用C函数,会找不到函数体,报链接错误。要解决这个问题,就要在 C++文件里面显示声明一下哪些函数是C写的,要用C的方式来处理。

1.引用头文件前需要加上 extern “C”,如果引用多个,那么就如下所示
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);
extern void D_app(int);

}

C++程序中调用被c编译器编译后的函数,为什么要加extern "C"?

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。C++编译器开发商已经对C 标准库的头文件作了extern“C”处理,所以我们可以用#include 直接引用这些头文件。

如何在C++中调用C程序?相关推荐

  1. m 文件 dll matlab 中调用_如何在matlab中调用python程序

    现在python很火,很多代码都是python写的,如果你和我一样,习惯了使用matlab,还想在matlab中调用Python的代码,应该怎么办呢?其中一条思路:首先在matlab中调用系统脚本命令 ...

  2. php调用python绘图程序_如何在matlab中调用python程序

    现在python很火,很多代码都是python写的,如果你和我一样,习惯了使用matlab,还想在matlab中调用Python的代码,应该怎么办呢?其中一条思路:首先在matlab中调用系统脚本命令 ...

  3. 如何在C++中调用python程序?

    文章目录 1. Embedding Python in Another Application 将Python嵌入另一个应用程序中 1.1. Very High Level Embedding 高层嵌 ...

  4. 如何在Python中调用C++程序?(文中以Opencv为例,在Python中调用C++的Opencv)

    https://www.cnblogs.com/zf-blog/p/11906786.html 要注意什么? 要注意在头文件.h中将需要引用的函数包括在 extern "C"中. ...

  5. 如何在HTML文档中调用Python程序?

    如何在HTML文档中调用Python程序? 简介: ​ 前几天突然遇到这样的一个需求,在html页面中调用python程序对图像进行处理,之后将处理后的图像重新显示在页面中.刚开始还不知道html页面 ...

  6. 如何在MFC中调用CUDA

    如何在MFC中调用CUDA 有时候,我们需要在比较大的项目中调用CUDA,这就涉及到MFC+CUDA的环境配置问题,以矩阵相乘为例,在MFC中调用CUDA程序.我们参考罗振东iylzd@163.com ...

  7. 一步一步学Silverlight 2系列(21):如何在Silverlight中调用JavaScript

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  8. Halcon初学者知识 【13】如何在MFC中调用Halcon代码

    要知道如何在MFC中调用Halcon代码,需要以下知识点: 在VC++2019的工程中,配置Halcon环境[请看此文] Halcon代码如何导出成C++代码 如何拆解halcon转换成C++的代码, ...

  9. fortran语言和python_如何在Fortran中调用Python

    Python是机器学习领域不断增长的通用语言.拥有一些非常棒的工具包,比如scikit-learn,tensorflow和pytorch.气候模式通常是使用Fortran实现的.那么我们应该将基于Py ...

最新文章

  1. 编译安装Zabbix 2.2 (LNMP环境)
  2. Web安全实战训练营
  3. VSCode主题:Dracula Official
  4. pg与oracle区别,PostgresQL 学习记录之与oracle区别(一)
  5. ios图文详情加载html_前端项目009 Vue 信息分享系统 商品列表、详情
  6. autojs 如何获取控件的desc_owchart教程三:如何添加成交量?
  7. 101个微软提供的Visual Studio 2005示例
  8. Vijos P1691 输油管道问题【中位数+排序】
  9. 二元二次不定方程(佩尔方程)
  10. 结对开发石家庄地铁查询系统
  11. ActiveMQ高可用集群的搭建
  12. 购买服务器的个人经验
  13. Go Http 解析 text/plain
  14. Java项目:SSM快递取件管理系统
  15. Pytorch:模型的保存与加载 torch.save()、torch.load()、torch.nn.Module.load_state_dict()
  16. Spark-Shell 及 Spark-Submit
  17. 「Gradle学习笔记」一、构建工具
  18. 实战PyQt5: 050-选项卡控件QTabWidget
  19. 2021年“东数西算”大背景下我国IDC产业发展现状与前景展望分析「图」
  20. “骑驴找马”被上司发现了,怎么办?

热门文章

  1. Linux基本命令-1
  2. php pdo字符,关于php:真正的转义字符串和PDO
  3. 黑马程序员python笔记_#华为云·寻找黑马程序员# 如何实现一个优雅的Python的Json序列化库...
  4. base.dispose(disposing) 未将对象引用到实例_程序员深入理解asp.net c#值类型和引用类型...
  5. case when mysql_mysql条件语句case when的实例
  6. python unpack infinity_fit_转换出错:输入包含NaN、infinity或对dtype(“float64”)太大的值...
  7. python代码覆盖率测试_利用coverage工具进行Python代码覆盖率测试
  8. jbl调音软件_[马自达] 佛山马自达昂克赛拉改装美国JBL汽车音响
  9. auto.js id为参数滑动_【Autojs教程】02Autojs PC端开发调试环境搭建
  10. 调查了6万多名开发者后,我们发现了这些...