Extern “C” 用法小结

extern “C“ 怎么使用? 函数前加 extern 是什么意思? 深度理解 C++ 与 C 代码之间的互操作性 C++ 代码(library.cpp)C 语言代码(main.c)// main.c// 声明 C++ 函数return 0;编译和链接# 编译 C++ 代码 g++ -c library.cpp -o library.o # 编译 C 代码 gcc -c main.c -o main.o # 链接生成可执行文件 g++ main.o library.o -o my_program运行my_program用途extern "C" 阅读详情

方法一:在C函数加上 extern 关键字,在相应的c++文件中用 extern “C” {include “c.h”}引入C的头文件
 ---------/*Max.h*/-------------------------

#ifndef _MAX_H_
#define _MAX_H_
extern int max(int x, int y);
#endif


#ifndef _MAX_H_
#define _MAX_H_
extern int max(int x, int y);
#endif

 ---------//*Max.c*/ ---------

#include “Max.h”
int max(int x, int y)
{
       return x>y?x:y;
}
 

------------/*Test.cpp*/-------------

extern "C"{
#include "max.h"
}
 
int main(void)
{
       int a=2, b=90;
       int c = 0;
       c = max(a,b);
}
 


方法二:利用C++宏 __cplusplus

----------/*Max.h*/-------------

#ifndef _MAX_H_
#define _MAX_H_
 
#ifdef __cplusplus
extern "C"{
#endif
 
extern int max(int x, int y); 
#ifdef __cplusplus
}

#endif 
#endif /*_MAX_H_*/ 

--------------/*Max.c*/----------------

#include “Max.h”
int max(int x, int y)
{
       return x>y?x:y;
}
 

-----------/*Test.cpp*/---------------

#include "max.h"
int main(void)
{
       int a=2, b=90;
       int c = 0;
       c = max(a,b);
}
 


因为C中没有定义__cplusplus宏,所以在C编译器看来,Max.h为:
extern int max(int x, int y);
而在c++看来,Max.h为:
extern "C"{
extern int max(int x, int y);
}
 
C++中extern “C”深层探索 C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容的语言,C++保留了一部分过程式语言的特点(被世人称为“不彻底地面向对象”),因而它可以定义不属于任何类的全局变量和函数。但是,C++毕竟是一种面向对象的程序设计语言,为了支持函数的重载,C++对全局函数的处理方式与C有明显的不同。C引用C++函数例子工程中包含的三个文件的源代码如下://C++头文件 cppExample.h#endif。 阅读详情

相关推荐

SAP生产订单(创建-下达-发料-报工-入库)全流程及反向流程

SAP创建下达报工入库发料以及取消发料取消入库,批量下达删除关闭,生产订单出入库查询和状态更改查询记录

weixin_38974136的博客 2万+

unity--修饰符

unity 修饰符

学海无涯 1620

最短线性递推式求解与有理函数重建

这一算法来自于我们对“线性递推式拟合”的视角转换,其后得到的算法是自然的。 引理 1. 如果两个有理分式 p1/q1,p2/q2p_1/q_1, p_2/q_2p1​/q1​,p2​/q2​ 均有 deg⁡p<n,deg⁡q≤n\deg p<n, \deg q\leq ndegp<n,degq≤n 且展开式 p1/q1≡p2/q2(modx2n)p_1/q_1 \equiv p_2/q_2 \pmod {x^{2n}}p1​/q1​≡p2​/q2​(modx2n),那么 p1/q1=p2/

Entropy Increaser 的博客 2592

【转载】关于static和extern的用法

 一些基本概念:1. 编译单元(模块):    在IDE开发工具大行其道的今天,对于编译的一些概念很多人已经不再清楚了,很多程序员最怕的就是处理连接错误(LINK ERROR), 因为它不像编译错误那样可以给出你程序错误的具体位置,你常常对这种错误感到懊恼,但是如果你经常使用gcc,makefile等工具在linux或者嵌 入式下做开发工作的话,那么你可能非常的理解编译与连接的区别!当在V

sony303的专栏 892

解决/usr/lib64/libstdc++.so.6和/lib64/libc.so.6版本过低问题

在CentOS7.0中编译好MySQL5.7.14之后,然后在CentOS6.5中初始化MySQL,执行:/usr/local/mysql/bin/mysqld --version出现如下问题:./bin/mysqld: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by ./bin/mysqld)

poxiaonie的博客 2万+

Arduino创意作品实战案例:手把手教你做温控风扇

通过这个实用的arduino创意作品,轻松实现温度感应与风扇自动控制,结合传感器与编程逻辑,打造智能散热系统,是入门者理想的arduino创意作品实践项目。

weixin_42311427的博客 608

Unity添加自定义拓展方法

通常你会发现你不能修改正在使用的那些类,无论它是基础的数据类型还是已有框架的一部分,它提供的方法让你困苦不堪。不过。。C# 提供了一种巧妙的方式来让你扩充已有的类,也就是我们今天要讲的扩展方法。扩展方法由于很方便而被经常使用到,我们更愿意叫他语法糖豆(syntactic sugar),一个实用样例是Unity的Transform类,比如:你只想设置Transform.position中Vector...

weixin_30908649的博客 255

Maven

是一款自动化构建工具,专注于Java项目的构建、依赖的管理。

weixin_58738870的博客 2163

C/C++中extern关键字详解

1 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。 也就是说extern有两个作用,第一个,当它与"C"一起连用时,如: extern "C" void fun(int a, int b);则告诉编译器在编译fun这个函数名时按着C的规则去翻译相应的函数名而...

weixin_34242509的博客 1298

手把手教你学Simulink——基于智能电网与AI融合的场景实例:强化学习在并网逆变器控制中的应用

本文介绍了如何利用Simulink和强化学习工具包实现并网逆变器的智能控制。针对传统PI控制方法的局限性,提出采用强化学习(RL)构建自适应控制系统。通过详细步骤展示了从建立主电路模型、设计强化学习环境、选择训练智能体(如PPO算法)到仿真对比测试的全过程。实验结果表明,RL控制器在动态响应、THD指标和参数鲁棒性等方面优于传统PI控制器,突显了数据驱动控制在复杂电力系统中的优势。文章还探讨了该技术在微电网协同控制、在线学习等场景的拓展应用,为智能电网控制提供了新思路。

MHD0815的博客 336

Openclaw接入大模型API,操作本地windows文件

本文介绍了在WSL2环境下配置OpenClaw使用阿里百炼API的方法。主要内容包括:1)确认WSL2安装完成;2)配置阿里百炼API(需注意Qwen3-Max-Thinking为收费模型);3)提供正确的JSON配置格式示例,强调apiKey必须填写真实值;4)说明配置错误需修改Linux配置文件;5)建议通过询问模型信息验证连接成功。后续将介绍如何切换免费API及本地文件访问功能。

qq_27246521的博客 989

unity里常用修饰符

public:任何地方都可以调用 protected:类和他的子类 private:只能在被类成员调用 internal:同一应用程序集内部(在VS.Net中一个工程中) sealed:修饰类时表示该类不能够被继承,修饰方法时表示该方法不能被覆写。 abstract:修饰类的时候表示该类为抽象类,不能够创建该 类的实例。修饰方法的时候表示该方法需要由子类来实现, 如果子类没有实现该方法那么子类同样...

l553250193的博客 2891

Open3D (C++) 计算点云坐标最值及其索引

使用C++版本的Open3D计算点云最值点及其对应的下标索引

点云侠的博客 730

C++ 中 extern "C" 用法小结

http://blog.youkuaiyun.com/playingguitar/article/details/1066127     昨天晚上翻《C++ Primer》偶尔看见介绍 extern "C" 的那一节,看着看着竟然有点糊涂了,觉得书上说的好像有点不对。记得以前也曾经看过这一节,也看过几篇介绍这个的文章,这次又犯糊涂,看来还是以前没有搞清楚。后来仔细看了看书上的介绍,又翻了一下《The

yarsen的专栏 707

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

【原创】C++ 中 extern "C" 用法小结

昨天晚上翻《C++ Primer》偶尔看见介绍 extern "C" 的那一节,看着看着竟然有点糊涂了,觉得书上说的好像有点不对。记得以前也曾经看过这一节,也看过几篇介绍这个的文章,这次又犯糊涂,看来还是以前没有搞清楚。后来仔细看了看书上的介绍,又翻了一下《The C++ Programming Language》,总算清楚了一些,书上说的没错,是我以前理解的有问题。 在C++中 extern ...

开心的穷下去 184

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【C++】extern “C“ 和 extern 深度探索

本文介绍了C和C++中extern关键字的用法及其在链接阶段的作用。extern用于声明在其他文件中定义的全局变量或函数,实现跨文件共享。extern "C"则是C++特有的用法,用于指示编译器按照C语言的链接规则处理代码,解决C++与C语言的链接兼容性问题,避免名称修饰带来的链接错误。文章还探讨了extern在修饰const变量时的注意事项,以及extern "C"影响本文件符号导出的细节。此外,还讨论了extern "C"对普通类型和C++类型符号导出的影响,以及extern "C"的正确使用方式。

杨翔裕的博客 2122

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

extern “C“ 用法详细说明

首先,先看一下下面这个例子:图1 案例它到底有什么用呢,这样的问题会出现在面试or笔试中,我觉得作为一个学C++的童鞋,应该了解一下。下面我就从以下几个方面来介绍它:1、#ifdef _cplusplus/#endif _cplusplus 在介绍extern "C"之前,我们来看下#ifdef _cplusplus/#endif _cplusplus的作用。很明显#ifdef/#endif、#ifndef/#endif用于条件编译,#ifdef _cplusplus/#endif _cplusplu

arvin_xiong的博客 6203

extern "C"用法总结

经常看到如下代码: #ifdef _cplusplus extern "C" { #endif #include "XXX.h" #ifdef _cplusplus } #endif 解释: extern "C"的作用是,告诉C++编译器,下面的代码按照C的方式进行编译,说白了,不要对这些函数进行名字重整(function name manglin

SCOTT 技术博客 1万+

extern “C”的用法和作用

extern “C”的作用详解        extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码,实现C++与C及其它语言的混合编程。加上extern "C"后,会指示编译器这部分代码按C语言的进行编译,而不是C++的。由于C++支持函数重载,因此编译器编译函数的过程中会将函数的参数...

weixin_43282440的博客 2359

嵌入式的C/C++:深入理解 inline 、extern与 extern “C“的用法与特点

在嵌入式开发中,C 和 C++ 是最常用的编程语言,特别是在高性能和低资源的硬件环境中,合理使用语言特性显得尤为重要。inline、extern 和 extern "C" 是嵌入式开发中的三大关键关键词,它们直接影响代码的性能、模块化设计以及跨语言的互操作性。然而,很多开发者对这些关键词的作用、使用场景以及注意事项了解不够全面,甚至可能在实际项目中导致难以察觉的错误。本文将从嵌入式开发的视角,深入剖析 inline、extern 和 extern "C" 的用法与特点,帮助您在项目中灵活运用,编写更高效、更

wallwayj的博客 1645

extern的用法

C语言中extern的用法 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客: 全新的界面...

Hacker_LiuSX的博客 7769

C++ 中 extern 与 extern “C“ 详解:从跨文件共享到 C/C++ 混合编程

场景 | 说明 || 全局变量跨文件共享 | 一个文件定义,其他文件用extern声明引用 || 全局常量跨文件共享 | 定义时加上,声明时也用| 头文件中的全局变量声明 | 头文件中使用extern声明,在单个 .cpp 中定义 || 跨文件函数调用 | 通常通过头文件声明即可,不需要显式写extern// header.h (错误写法)// 这是定义,不是声明!#include "header.h" // 定义一次。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 739
上一篇: makefile自动变量
下一篇: 静态链接库与动态链接库
comlc
博客等级 码龄19年 9粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值