C++的链接指示extern “C“

news2024/9/22 15:31:42

目录

    • 链接指示extern "C"
      • A.What(概念)
      • B.Why(extern "C"的作用)
      • C.How (如何使用链接指示extern "C")

链接指示extern “C”

A.What(概念)

extern"C" 用于在 C++ 代码中声明使用 C 语言编写的函数和全局变量, 在这样的声 明中,编译器会按照 C 语言的命名规则和链接规则进行处理,以保证函数或变量能够 正确地被调用和访问

B.Why(extern "C"的作用)

  • 避免名称修饰问题:

    在 C++ 中,全局变量的名称和函数名称会被 C++ 编译器进行名称修饰。而在 C 语言中,全局变量和函数没有这种修饰。当我们想在 C++ 代码中访问 C 语言编写的全局变量和函数时,需要在全局变量声明和函数前加 上 extern"C",以告诉编译器按照 C 语言的规则进行处理,避免名称修饰问题

  • 跨语言使用和编译:

    有权访问其它语言的编译器,并和当前 C++编译器具有兼容性

C.How (如何使用链接指示extern “C”)

  • 链接指示不能出现在类定义和函数定义的内部

  • 常规使用:
    在这里插入图片描述

    char str01[40] = "wodeshijie";
    cout<<strlen(str01)<<endl; //打印:10
    cout<<add(3,4)<<endl; //打印:7
    char str02[40] = "WODESHIJIE";
    strcat(str01,str02);
    cout<<str01<<endl; //打印:wodeshijieWODESHIJIE
    
  • 链接指示与头文件

    extern "C"
    {
    #include <string.h>
    }
    //使用string.h中的函数
    char zs[20] = "zhangsan"
    char zsCopy[20]= "";
    strcpy(zsCopy, zs);
    cout<<zsCopy<<endl; //打印:zhangsan
    
  • 导出C++函数到其它语言

    // myAdd函数可以被C程序调用
    extern "C" double myAdd(double a, double b){return a+b;}
    

注意:C语言不支持函数的重载
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1921538.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

100 个网络基础知识普及,看完成半个网络高手!

1&#xff09;什么是链接&#xff1f; 链接是指两个设备之间的连接。它包括用于一个设备能够与另一个设备通信的电缆类型和协议。 2&#xff09;OSI 参考模型的层次是什么&#xff1f; 有 7 个 OSI 层&#xff1a;物理层&#xff0c;数据链路层&#xff0c;网络层&#xff0…

ElasticSearch第一天

学习目标&#xff1a; 能够理解ElasticSearch的作用能够安装ElasticSearch服务能够理解ElasticSearch的相关概念能够使用Postman发送Restful请求操作ElasticSearch能够理解分词器的作用能够使用ElasticSearch集成IK分词器能够完成es集群搭建 第一章 ElasticSearch简介 1.1 什么…

javaweb个人主页设计(html+css+js)

目录 1 前言和要求 1.1 前言 1.2 设计要求 2 预览 2.1 主页页面 2.2 个人简介 2.3 个人爱好 2.4 个人成绩有代码&#xff0c;但是图片已省略&#xff0c;可以根据自己情况添加 2.5 收藏夹 3 代码实现 3.1 主页 3.2 个人简介 3.3 个人爱好 3.4 个人成绩&#xff…

shell 字符串列表操作

我的需求是这样的&#xff1a;编译多个模块的时候&#xff0c;把失败的模块添加到列表里&#xff0c;最后输出。这个列表类似这样&#xff1a;failModuleList"a b c d e" 先定义一个空的字符串列表&#xff1a; failModuleList"" 然后利用字符串的拼接方…

CVPR`24 | 又快又好!渲染速度比ENeRF快30倍!4K4D:实时4K分辨率4D视图合成

文章链接&#xff1a;https://arxiv.org/pdf/2310.11448 git链接&#xff1a; https://zju3dv.github.io/4k4d/ 本文旨在实现动态3D场景在4K分辨率下的高保真和实时视图合成。最近&#xff0c;一些动态视图合成方法在渲染质量方面表现出色。然而&#xff0c;在渲染高分辨率图像…

如何合并pdf文件?分享3种常见的方法!

在数字化办公日益普及的今天&#xff0c;PDF文件因其格式稳定、兼容性强、阅读方便等特点&#xff0c;成为了人们日常工作和学习中不可或缺的一部分。然而&#xff0c;当我们需要处理多个PDF文件时&#xff0c;如何将它们高效地合并成一个文件&#xff0c;以便更好地管理和分享…

Linux进程——进程的概念

文章目录 PCB进程排队进程标识符pid终止进程获取进程id父进程与子进程 我们在上一节内容中有简单谈到进程的感性理解&#xff0c;他在课本上的概念是&#xff0c;程序的一个执行实例或正在执行的程序 但在本质上&#xff0c;他其实就是一个被分配了系统资源&#xff08;CPU&am…

公有云API常见的认证方式

公有云API常见的认证方式 Token认证 &#xff08;百度云、腾讯云&#xff09; AK/SK认证 (阿里云、天翼云、腾讯云) RSA非对称加密方式 &#xff08;信核云灾备&#xff09; Token认证 AK/SK认证 RSA认证 种方式使用一对密钥&#xff0c;即公钥和私钥。公钥可以公开&#x…

Java数据结构-链表与LinkedList

链表 链表的概念 链表是一种物理存储结构上非连续的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的引用链接次序实现的。 通俗来说&#xff0c;相比较于顺序表&#xff08;物理上连续&#xff0c;逻辑上也连续&#xff09;&#xff0c;链表物理上不一定连续。 链表是…

【C++航海王:追寻罗杰的编程之路】一篇文章带你认识哈希

目录 1 -> unordered系列关联式容器 1.1 -> unordered_map 1.1.1 -> unordered_map的文档介绍 1.1.2 -> unordered_map的接口说明 1.2 -> unordered_set 2 -> 底层结构 2.1 -> 哈希概念 2.2 -> 哈希冲突 2.3 -> 哈希函数 2.4 -> 哈希冲…

Mysql进阶(一)——存储引擎

MySQL体系结构 1). 连接层 最上层是一些客户端和链接服务&#xff0c;包含本地sock 通信和大多数基于客户端/服务端工具实现的类似于 TCP/IP的通信。主要完成一些类似于连接处理、授权认证、及相关的安全方案。在该层上引入了线程 池的概念&#xff0c;为通过认证安全接入的…

【启明智显分享】ESP32-S3 4.3寸触摸串口屏HMI应用方案:WIFI/蓝牙无线通信助力烘干设备实现远程遥控

技术不断进步&#xff0c;人们对烘干设备的美观度、功能多样性提出更高要求&#xff0c;传统的数码管显示、按键式控制已经无法满足客户的需求。用智能屏替代传统的数码管可以很好的解决这个问题&#xff0c;为用户带来更好的人机交互体验。 基于此&#xff0c;启明智显提出将乐…

在Nginx里给你的站点或者目录加个用户认证

在HTTP中&#xff0c;基本认证&#xff08;Basic access authentication&#xff09;是一种用来允许网页浏览器或其他客户端程序在请求时提供用户名和口令形式的身份凭证的一种登录验证方式。 常见的用户认证截图 ngx_http_auth_basic_module模块实现让访问着&#xff0c;只有…

免费分享:2018-2023中国地区地震数据集(附下载方法)

地震波是地震引起的振动以波的形式从震源向各个方向传播并释放的能量。震级是表示地震本身大小的尺度&#xff0c;地震烈度是指某一地区的地面和各类建筑物遭受到一次地震影响的强烈程度。 数据简介 2018-2023中国地区地震数据集主要变量包括time&#xff08;时间&#xff09…

爬虫管理解决方案:让数据收集变得高效且合规

一、为何数据收集的效率与合规性同等重要&#xff1f; 随着大数据技术的飞速发展&#xff0c;数据收集已成为企业决策与市场洞察的核心驱动力。然而&#xff0c;在信息海洋中精准捕捞的同时&#xff0c;如何确保这一过程既高效又不触碰法律的红线&#xff0c;是每个数据实践者…

程序员标准简历模板

链接: https://pan.baidu.com/s/1yMXGSSNba15b9hMXjA39aA?pwdb4ev 提取码: b4ev 3年工作经验简历 链接: https://pan.baidu.com/s/1OO7n1lRL6AkhejxYC9IyDA?pwdfmvv 提取码: fmvv 优秀学员简历 链接: https://pan.baidu.com/s/106Vkw_ulOInI47_5mDySSg?pwduudc 提取码: uu

红酒的未来展望:探索行业的发展趋势

在时间的洪流中&#xff0c;红酒以其不同的魅力&#xff0c;一直占据着人们心中不可或缺的地位。随着时代的变迁&#xff0c;红酒行业也在不断地发展和演变。今天&#xff0c;就让我们一起走进红酒的未来&#xff0c;探索这个古老而又充满活力的行业将如何继续书写其辉煌的篇章…

使用node-cmd重启electron

说明&#xff1a;在electron中&#xff0c;想要手动重启客户端服务&#xff0c;分为两种情况 第一种&#xff1a;是使用electron自带的api进行窗口的重新启动&#xff0c;app.relaunch() 第二种&#xff1a;重启电脑运行的客户端服务 安装 npm install node-cmd -S使用 使用说…

【JavaScript 算法】动态规划:最优子结构与重叠子问题

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 一、最优子结构1.1 最优子结构的例子1.2 如何识别最优子结构 二、重叠子问题2.1 重叠子问题的例子2.2 解决重叠子问题的方法2.3 如何识别重叠子问题 三、经典动态规划问题及其 JavaScript 实现3.1 斐波那契数列3.2 背包问题…

Java I/O模式 (一)

第一章 Java的I/O演进之路 1.1 I/O模型基本说明 1/0模型&#xff1a;就是用什么样的通道或者说是通信模式和架构进行数据的传输和接收&#xff0c;很大程度上决定了程序通信的性能&#xff0c;Java 共支持3种网络编程的/10 模型&#xff1a;BIO、NIO、AIO 实际通信需求下&am…