[C++] external “C“的作用和使用场景

C++中extern "C"的作用是什么?

在 C++ 中,extern "C" 的作用是告诉编译器按照 C 语言的规范来处理函数名和变量名。这是因为 C++ 编译器会对函数名和变量名进行名称修饰(name mangling),以区分不同的函数和变量。而在 C 语言中,函数名和变量名不会被名称修饰,因此需要使用 extern "C" 来告诉编译器使用 C 语言的规则。

下面是微软官方文档关于“extern "C"”的使用说明:

extern (C++) | Microsoft Learn

extern (C++) | Microsoft Learn

以下示例演示如何声明具有 C 链接的名称: 

// Declare printf with C linkage.
extern "C" int printf(const char *fmt, ...);

//  Cause everything in the specified
//  header files to have C linkage.
extern "C" {
    // add your #include statements here
#include <stdio.h>
}

//  Declare the two functions ShowChar
//  and GetChar with C linkage.
extern "C" {
    char ShowChar(char ch);
    char GetChar(void);
}

//  Define the two functions
//  ShowChar and GetChar with C linkage.
extern "C" char ShowChar(char ch) {
    putchar(ch);
    return ch;
}

extern "C" char GetChar(void) {
    char ch;
    ch = getchar();
    return ch;
}

// Declare a global variable, errno, with C linkage.
extern "C" int errno;

首先看看 C++ 中,在未加 extern "C" 声明时,对类似 C 的函数是怎样编译的:

作为一种面向对象的语言, C++ 支持函数重载,而过程式语言 C 则不支持。所以,函数被 C++ 编译后在符号库中的名字与 C 语言的有所不同。例如,假设某个函数的原型为:

void foo( int x, int y );

该函数被 C 编译器编译后在符号库中的名字为 _foo ,而 C++ 编译器则会产生像 _foo_int_int 之类的名字(不同的编译器可能生成的名字不同,但是都采用了相同的机制,生成的新名字称为名称修饰(name mangling) 。 _foo_int_int 这样的名字包含了函数名、函数参数数量及类型信息, C++ 就是靠这种机制来实现函数重载的。例如,在 C++ 中,函数 void foo( int x, int y ) 与 void foo(int x, float y ) 编译生成的符号是不相

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【b站咸虾米】chapter4_vue组件_新课uniapp零基础入门到项目打包(微信小程序/H5/vue/安卓apk)全掌握

课程地址&#xff1a;【新课uniapp零基础入门到项目打包&#xff08;微信小程序/H5/vue/安卓apk&#xff09;全掌握】 https://www.bilibili.com/video/BV1mT411K7nW/?p12&share_sourcecopy_web&vd_sourceb1cb921b73fe3808550eaf2224d1c155 四、vue组件 uni-app官网 …

《战略共创年度辅导》:手把手辅导企业做战略,比传统咨询更落地

今天产业迭代速度不断加剧,人类知识更迭周期大大压缩到2年以内,企业遭遇更多挑战:1.增长乏力;2.品牌老化;3.竞争压力大;4.竞争方向不明确;5.产品同质化;6.利润越来越低;7.团队执行难等等。 基于此&#xff0c;《战略共创年度辅导》应运而生&#xff0c;旨在手把手辅导企业家及…

基于改进蝙蝠算法的三维航线规划算法

matlab2020a可正常运行 基于改进蝙蝠算法的三维航线规划资源-CSDN文库

MySQL深度分页优化问题

☆* o(≧▽≦)o *☆嗨~我是小奥&#x1f379; &#x1f4c4;&#x1f4c4;&#x1f4c4;个人博客&#xff1a;小奥的博客 &#x1f4c4;&#x1f4c4;&#x1f4c4;CSDN&#xff1a;个人CSDN &#x1f4d9;&#x1f4d9;&#x1f4d9;Github&#xff1a;传送门 &#x1f4c5;&a…

2018年认证杯SPSSPRO杯数学建模A题(第二阶段)海豚与沙丁鱼全过程文档及程序

2018年认证杯SPSSPRO杯数学建模 基于聚类分析的海豚捕食合作策略 A题 海豚与沙丁鱼 原题再现&#xff1a; 沙丁鱼以聚成大群的方式来对抗海豚的捕食。由于水下光线很暗&#xff0c;所以在距离较远时&#xff0c;海豚只能使用回声定位方法来判断鱼群的整体位置&#xff0c;难…

cKDTree中的query_ball_point()函数用法

1. 用法 x可以是一个点也可以是一堆点&#xff0c;要找x邻域内的点。 r是搜索的半径。 eps是一个非负的float型小数&#xff0c;如果最近邻的点距离比r/(1eps)还大&#xff0c;则不再进行搜索。 返回找到的点的索引。 from scipy.spatial import cKDTree #point cloud data -&…

PBR材质纹理下载

03:10 按照视频里的顺序 我们从第6个网站开始倒数 点击本行文字或下方链接 进入查看 6大网站地址 网址查看链接&#xff1a; http://www.uzing.net/community_show-1962-48-48-35.html 06 Tectures Wood Fence 001 | 3D TEXTURES 简介&#xff1a;最大的纹理网站之一&#x…

Vcruntime140_1.dll丢失的错误提示怎么解决,关于Vcruntime140_1.dll文件

在使用电脑时你是否遇到过关于Vcruntime140_1.dll文件丢失的错误提示&#xff0c;出现这样的提示时是不是不知所措&#xff0c;今天就给大家讲解Vcruntime140_1.dll文件的一些相关介绍&#xff0c;希望能够帮助大家解决Vcruntime140_1.dll丢失的难题。 一.Vcruntime140_1.dll文…

Docker 安装 CentOS

Docker 安装 CentOS CentOS&#xff08;Community Enterprise Operating System&#xff09;是 Linux 发行版之一&#xff0c;它是来自于 Red Hat Enterprise Linux(RHEL) 依照开放源代码规定发布的源代码所编译而成。由于出自同样的源代码&#xff0c;因此有些要求高度稳定性…

2023年全球软件质量效能大会(QECon深圳站):核心内容与学习收获(附大会核心PPT下载)

随着科技的快速发展&#xff0c;软件行业面临着越来越多的挑战和机遇。为了更好地应对这些挑战&#xff0c;不断提升软件的质量和效能&#xff0c;大会将汇聚全球的软件开发者、架构师和项目经理&#xff0c;共同探讨和分享关于软件质量保证、测试、性能优化、用户体验设计、人…

寒假刷题-递归与递推

寒假刷题 92. 递归实现指数型枚举 解法1递归 使用递归对每一个坑位进行选择&#xff0c;每个坑位有两种选择&#xff0c;填或者不填&#xff0c;使用st数组来记录每个坑位的状态&#xff0c;u来记录已经有多少坑位有了选择。 每个坑位有2钟选择&#xff0c;n个坑位的复杂度就…

基于gd32f103移植freemodbus master 主栈

1.移植freemodbus master需要先移植RT-Thread操作系统 GD32F103C8T6移植 RTT Nano 教程-CSDN博客 2.移植freemodbus master协议栈 在移植了RTT以后,我们需要移植就只有串口相关的函数 移植freemodbus master协议栈具体步骤 下载移植freemodbus master协议栈 源码添加协议栈…

PPT 编辑模式滚动页面不居中

PPT 编辑模式滚动页面不居中 目标&#xff1a;编辑模式下适应窗口大小、切换页面居中显示 调整视图大小&#xff0c;编辑模式通过Ctrl 鼠标滚轮 或 在视图菜单中点击适应窗口大小。 2. 翻页异常&#xff0c;调整视图大小后&#xff0c;PPT翻页但内容不居中或滚动&#xff0c…

2024开放式耳机怎么选?最新开放式耳机选购指南,实测避坑!

在音乐的世界中&#xff0c;开放式耳机为听者提供了一种与众不同的聆听体验&#xff0c;它们能够让你更深入地感受音乐&#xff0c;长时间佩戴也更加舒适健康&#xff0c;2024年市场上涌现出了众多优质的开放式耳机&#xff0c;为音乐爱好者提供了丰富的选择&#xff0c;但如何…

AWS CI/CD之三:CodePipeline

前提 在搞定CodeBuild和CodeDeploy之后&#xff0c;就可以配置CodePipeline&#xff0c;这是AWS CI/CD最后一个核心服务了。 1. 设置源 打开CodePipeline主页&#xff0c;开始创建管道&#xff0c;如下图&#xff1a; 管道设置&#xff0c;如下图&#xff1a; 设置源&…

排序:计数排序

目录 思想&#xff1a; 操作步骤&#xff1a; 思路&#xff1a; 注意事项&#xff1a; 优缺点&#xff1a; 代码解析&#xff1a; 完整代码展示&#xff1a; 思想&#xff1a; 计数排序又称为鸽巢原理&#xff0c;是对哈希直接定址法的变形应用。 操作步骤&#xff…

我用 ChatGPT 做了一次探索性数据分析,真的太太太实用了!

ChatGPT 经过短短1年时间的发展&#xff0c;其功能越来越强&#xff0c;现在已经是大多数企业和个人不可或缺的助手。特别是最新的 GPT-4 版本&#xff0c;专门在左边菜单栏给出了两个工具&#xff08;一个是数据分析&#xff0c;另一个是根据文字描述生成图片&#xff09;&…

RT-Thread Studio学习(十六)定时器计数

RT-Thread Studio学习&#xff08;十六&#xff09;定时器计数 一、简介二、新建RT-Thread项目并使用外部时钟三、启用PWM输入捕获功能四、测试 一、简介 本文将基于STM32F407VET芯片介绍如何在RT-Thread Studio开发环境下使用定时器对输入脉冲进行计数。 硬件及开发环境如下…

使用pyechart创建折线图

import json from pyecharts.charts import Line from pyecharts import options# 首先使用文件打开数据 f_us open(Desktop/python/Project/数据可视化/美国.txt,r,encoding"UTF-8") f_rb open(Desktop/python/Project/数据可视化/日本.txt,r,encoding"UTF-8…

springboot106大学城水电管理系统

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的大学城水电管理系统 适用于计算机类毕业设计&#xff0c;课程设计参考与学习用途。仅供学习参考&#xff0c; 不得用于商业或者非法用途&#xff0c;否则&#xff0c;一切后果请用户自负。 看运行截图看 第五章 第四章 …
最新文章