首页 > 其他分享 >extern "C"的使用

extern "C"的使用

时间:2022-11-22 11:57:53浏览次数:42  
标签:__ int sum 使用 extern cplusplus

在使用C++开发程序时,有时使用到别人开发的第三方库,而这第三库是使用C开发的。直接使用会报错如下:
cpp error LNK2019: 无法解析的外部符号 "int __cdecl sum(int,int)" (?sum@@YAHHH@Z),函数 main 中引用了该符号
源码

// main.cpp

#include<iostream>

using namespace std;

int sum(int v, int d);
int detal(int v, int d);

int main()
{

	cout << sum(2, 3) << endl;
	cout << detal(15, 5) << endl;
	return 0;
}

第三方库测试文件

// math.c

int sum(int v, int d)
{
	return v + d;
}


int detal(int v, int d)
{
	return v - d;
}

如果直接在cpp文件使用c文件的方法,会报错。
对这种情况,可以使用extern "C"的方式

解释:告诉编译器使用C的方式编译,但如果C也调用了extern "C" 修饰的方法也会报错

解决:定义与申明分离,将声明写入.h文件中,定义在.c文件中
同时使用宏对使用这第三方库的c++文件增加extern "C"。

补充:宏 __cplusplus
每一个cpp前面都定义了这个宏,只是没显示出来

// math.h


#ifdef __cplusplus
extern "C" {
#endif // __cplusplus
	int sum(int v, int d);
	int detal(int v, int d);
#ifdef __cplusplus
}
#endif // __cplusplus

标签:__,int,sum,使用,extern,cplusplus
From: https://www.cnblogs.com/web-linux-qin/p/16914643.html

相关文章

  • webpack - 安装和使用
    1.安装webpack创建项目目录,初始化并安装webpack相关安装包mkdirwebpack-democdwebpack-demonpminit-ynpminstallwebpackwebpack-cli--save-dev创建相关文......
  • Android使用MAT分析内存泄露
    一.概述首先来普及一下什么是内存泄露:内存泄露是指对象的内存在分配之后无法通过程序的执行逻辑释放对该对象的引用,导致不能回收该对象所占内存。内存泄露会导致以下情......
  • 使用阿里云云服务器和Wordpress个人建站
    先贴一个阿里云官方的通过ECS服务器建站的教程链接https://developer.aliyun.com/article/761621需要说明的是如果需要通过公网访问你的网站那么必须要先进行I......
  • [Python] 多线程 概念 使用
    python多线程1.线程的概念线程是CPU分配资源的基本单位。当一程序开始运行,这个程序就变成了一个进程,而一个进程相当于一个或者多个线程。当没有多线程编程时,一个进程......
  • 使用python中urllib.request.Request()来构建ua
    1.代码案例=构建http请求头#coding=utf-8importurllib.requestimporturllib.parseurl="http://www.baidu.com/"headers={'User-Agent':'Mozilla/5.0(WindowsNT6......
  • python使用httpHandler处理请求案例
    #coding=utf-8#HTTPHandler&opener#更高级一些功能,可以高仿模拟浏览器importurllib.requestimporturllib.parseurl="https://www.baidu.com/";handler=urllib.requ......
  • 【2022.11.21】pytorch的使用相关(五)
    资料来源ShusenTang/Dive-into-DL-PyTorch:本项目将《动手学深度学习》(DiveintoDeepLearning)原书中的MXNet实现改为PyTorch实现。(github.com)代码部分%matplotl......
  • NumPy笔记(2)—— 使用数组进行面向数组编程
    参考:《利用python进行数据分析》第4章注意,由于本文是jupyter文档转换来的,代码不一定可以直接运行,有些注释是jupyter给出的交互结果,而非运行结果!!文章目录​​1.生成网格数......
  • 前端使用scp命令部署到服务器
    由于没有弄自动部署环境,每次打包后,不是要把代码发给后端就是发给运维,比较麻烦。所以想到了命令部署。弄起来也很简单,使用nodejs的scp即可以vue-cli创建的vue2项目为例......
  • 森林野火故事2.0:一眼看穿!使用 Panel 和 hvPlot 可视化 ⛵
    ......