【C++干货基地】C++:函数重载(深度解析Windows和Linux下函数的修饰规则)


在这里插入图片描述

🎬 鸽芷咕:个人主页

 🔥 个人专栏: 《C++干货基地》《粉丝福利》

⛺️生活的理想,就是为了理想的生活!

引入

  哈喽各位铁汁们好啊,我是博主鸽芷咕《C++干货基地》是由我的襄阳家乡零食基地有感而发,不知道各位的城市有没有这种实惠又全面的零食基地呢?C++ 本身作为一门篇底层的一种语言,世面的免费课程大多都没有教明白。所以本篇专栏的内容全是干货让大家从底层了解C++,把更多的知识由抽象到简单通俗易懂。

⛳️ 推荐

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。

文章目录

  • 引入
  • ⛳️ 推荐
  • 一、从编译原理分析
    • 1.1 源文件编译的完整过程
  • 二、C++支持函数重载的原理--名字修饰(name Mangling)
      • 2.1 C语言和C++编译器编译对比
      • 2.2 linux下C++命名修饰规则
      • 2.2 Windows下名字修饰规则
      • 2.3 windows 下函数名实例
  • 三、C++支持函数重载而C语言不支持总结
  • 📝文章结语:

一、从编译原理分析

为什么什么C语言不支持函数重载呢?这个需要和编译原理上来进行分析在我们对源文件进行编译的时候是需要进行

  • 4 个步骤的,他们分别是

在这里插入图片描述

1.1 源文件编译的完整过程

📑假设我们有,一个声明和定义分离的3个文件

  • 🌱那么他进行编译的过程一点是这样
    在这里插入图片描述
    🔥 而在C语言 .o 文件在进行合并时是通过符号表来查找,但C语言生成的符号表函数名是唯一的所以

  • 函数重载:相同函数名形参列表 (参数个数 或 类型 或 类型顺序) 不同有不同函数功能也就实现不了

二、C++支持函数重载的原理–名字修饰(name Mangling)

而C++在此基础上在,C语言的基础上对符号表中的函数名做了新的修饰,所以同名但 (参数个数 或 类型 或 类型顺序) 不同的

  • 函数在符号表中,名字是不一样的了
  • 这也就是为什么C++中支持函数重载的原理

2.1 C语言和C++编译器编译对比

在这里插入图片描述

  • 这里就可以看到在linux下,采用gcc编译完成后 C语言文件,函数名字的修饰没有发生改变。
  • 在linux下,采用g++编译完成后,函数名字的修饰发生改变,编译器将函数参
    数类型信息添加到修改后的名字中。

2.2 linux下C++命名修饰规则

在这里插入图片描述

linux 下的函数修饰名实际上非常简单:

<_Z3Addii>
_Z 是修饰符
3 是函数名的符号数
后面跟的 ii 是 形参类型

2.2 Windows下名字修饰规则

在这里插入图片描述
以上是一些文档对Windows下函数名字修饰规则的一些解释再,windows中函数的名字修饰并不是很理解

windows下修饰符修饰符所代表的意思
Xvoid
Dchar
Eunsigned char
Fshort
Hint
Iunsigned int
Jlong
Kunsigned long(DWORD)
Mfloat
Ndouble
_Nbool
Ustruct

2.3 windows 下函数名实例

好了前面说了怎么多下面我们就来看一下实际情况中 windowsvs 编译器对函数名是如何修饰的吧!

🍸 代码演示:

#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;void ADD(int a, int b);
void ADD(double a, double b);
void ADD(char a, char b);int main()
{ADD(1, 1);ADD(1.1, 1.1);ADD('a' , 'a');return 0;
}

📑代码结果:
在这里插入图片描述

三、C++支持函数重载而C语言不支持总结

    1. C++ 支持函数重载是因为 对函数名做了修饰,相同函数名形参列表 (参数个数 或 类型 或 类型顺序) 但修饰过后 所生成的函数符号不同,这样我们就可以根据 (参数个数 或 类型 或 类型顺序) 的同名函数来进行函数重载的支持!
    1. C 语言不支持函数重载是因为,在C语言中所生成的符号表中 函数名是唯一的所以C语言不支持函数重载

📝文章结语:

☁️ 看到这里了还不给博主扣个:
⛳️ 点赞🍹收藏 ⭐️ 关注
💛 💙 💜 ❤️ 💚💓 💗 💕 💞 💘 💖
拜托拜托这个真的很重要!
你们的点赞就是博主更新最大的动力!

在这里插入图片描述

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

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

相关文章

nacos开启鉴权+springboot配置用户名密码

nacos默认没有开启鉴权&#xff0c;springboot无需用户名密码即可连接nacos。从2.2.2版本开始&#xff0c;默认控制台也无需登录直接可进行操作。 因此本文记录一下如何开启鉴权&#xff0c;基于nacos2.3.0版本。 编辑nacos服务端的application.properties&#xff1a; # 开…

【wow-ts学习笔记】Vue3第一章:模板

本课程是DW内测开源课程wow-ts项目的学习笔记 项目地址&#xff1a; https://github.com/datawhalechina/wow-ts 什么是 Vue3​ Vue (发音为 /vjuː/&#xff0c;类似 view) 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建&#xff0c;并…

DCIC 2024 数据要素赛道算力资源申请与使用指南

云资源开通 企业认证通过后&#xff0c;由企业账号申请开通资源池服务 开通资源池服务 控制台左侧菜单【云资源】--【ModelArts】--【开通服务】后&#xff0c;方可申请专属资源&#xff0c;等待申请通过后即可正常使用资源。 OBS Browser使用 对象存储服务OBS是一个基…

css字体随着屏幕自适应

场景&#xff1a; 假设&#xff0c;字体为70px 在大屏显示正常&#xff0c;但是在笔记本上文字就换行了。我想字体随着屏幕变化而变化。 方法&#xff1a; 使用clamp函数&#xff0c;该函数接收三个参数&#xff1a;分别为 最小值&#xff0c;首选值&#xff0c;最大值。 .d…

java原理及插件,2022大厂Java面试必问题目

CAP原则 在分布式系统要满足CAP原则&#xff0c;一个提供数据服务的存储系统无法同时满足&#xff1a;数据一致性、数据可用性、分区耐受性。 C数据一致性&#xff1a;所有应用程序都能访问到相同的数据。 A数据可用性&#xff1a;任何时候&#xff0c;任何应用程序都可以读写…

C语言————结构体

接下来我们来了解C语言中很重要的内容&#xff1a;结构体。虽然到现在我们可以创建常量&#xff0c;变量&#xff0c;数组&#xff0c;但是存储的都是相同类型的数据&#xff0c;如果我们需要写入不同数据类型的信息怎么办&#xff0c;例如常见的身份证上的信息&#xff0c;有身…

小程序框架(概念、工作原理、发展及应用)

引言 移动应用的普及使得用户对于轻量级、即时可用的应用程序需求越来越迫切。在这个背景下&#xff0c;小程序应运而生&#xff0c;成为一种无需下载安装、即点即用的应用形式&#xff0c;为用户提供了更便捷的体验。小程序的快速发展离不开强大的开发支持&#xff0c;而小程…

这一步一步爬的伤痕累累

一、网安专业名词解释 ① CTF CTF&#xff08;Capture The Flag&#xff09;中文一般译作夺旗赛&#xff0c;在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式。CTF起源于1996年DEFCON全球黑客大会&#xff0c;以代替之前黑客们通过互相发起真实攻击进…

yolov5v7v8目标检测增加计数功能--免费源码

在yolo系列中&#xff0c;很多网友都反馈过想要在目标检测的图片上&#xff0c;显示计数功能。其实官方已经实现了这个功能&#xff0c;只不过没有把相关的参数写到图片上。所以微智启软件工作室出一篇教程&#xff0c;教大家如何把计数的参数打印到图片上。 一、yolov5目标检测…

【物联网应用案例】智能农业应用案例

随着物联网 (IoT) 的广泛应用&#xff0c;各种互联设备已经深度融入我们的生活&#xff0c;涵盖了健康与健身、家庭自动化、物流运输以及智慧城市和工业物联网等多个领域。因此&#xff0c;将物联网、联网设备和自动化技术应用于农业&#xff0c;是十分符合时代发展需求的&…

求字符串所有整数最小和 - 华为OD统一考试(C卷)

OD统一考试&#xff08;C卷&#xff09; 分值&#xff1a; 100分 题解&#xff1a; Java / Python / C 题目描述 1.输入字符串s输出s中包含所有整数的最小和&#xff0c;说明&#xff1a;1字符串s只包含a~z,A~Z,,-&#xff0c; 2.合法的整数包括正整数&#xff0c;一个或者多…

Mycat核心教程--Mycat 监控工具【四】

Mycat核心教程--Mycat 监控工具 九、Mycat 监控工具9.1.Mycat-web 简介9.2.Mycat-web 配置使用9.2.1.ZooKeeper 安装【上面有】9.2.2.Mycat-web 安装9.2.2.1.下载安装包9.2.2.2.安装包拷贝到Linux系统/opt目录下&#xff0c;并解压9.2.2.3.拷贝mycat-web文件夹到/usr/local目录…

QT摄像头采集

主界面为显示框&#xff0c;两个下拉框&#xff0c;一个是所有相机&#xff0c;一个是相机支持的分辨率 系统根据UI界面自动生成的部分不再描述&#xff0c;以下为其他部分源码 widget.h #include <QWidget> #include <QMouseEvent> class QCamera; class QCamer…

express+mysql+vue,从零搭建一个商城管理系统4--mysql数据库链接

提示&#xff1a;学习express&#xff0c;搭建管理系统 文章目录 前言一、创建express_service数据库二、安装mysql三、新建config文件夹四、新建config/db.js五、index.js引入db.js文件六、启动项目预览总结 前言 需求&#xff1a;主要学习express&#xff0c;所以先写service…

“智农”-农业一体化管控平台

大棚可视化|设施农业可视化|农业元宇宙|农业数字孪生|大棚物联网|大棚数字孪生|农业一体化管控平台|智慧农业可视化|智农|农业物联网可视化|农业物联网数字孪生|智慧农业|大棚三维可视化|智慧大棚可视化|智慧大棚|农业智慧园区|数字农业|数字大棚|农业大脑|智慧牧业数字孪生|智…

Presto简介、部署、原理和使用介绍

Presto简介、部署、原理和使用介绍 1. Presto简介 1-1. Presto概念 ​ Presto是由Facebook开发的一款开源的分布式SQL查询引擎&#xff0c;最初于2012年发布&#xff0c;并在2013年成为Apache项目的一部分&#xff1b;Presto 作为现在在企业中流行使用的即席查询框架&#x…

数仓项目6.0(二)数仓

中间的几步意义就在于&#xff0c;缓存中间处理数据样式&#xff0c;避免重复计算浪费算力 分层 ODS&#xff08;Operate Data Store&#xff09; Spark计算过程中&#xff0c;存在shuffle的操作&#xff0c;而shuffle会将计算过程一分为二&#xff0c;前一阶段不执行完&…

word文档自动调节图片大小-宏制作

word文档自动调节图片大小-宏制作 1. 首先创建一个空白word文档 当然也可以是任意word文档&#xff0c;这里方便演示&#xff0c;所以创建一个空白word文档。 2. 在菜单列表找到【视图】- 【宏】 3. 点击宏&#xff0c;录制一个宏 4. 录制宏起个名字&#xff0c;然后确定 5…

如何选择科技公司或者技术团队来开发软件项目呢

最近有客户问我们为什么同样软件项目不同公司报价和工期差异很大&#xff0c;我们给他解释好久才讲清楚&#xff0c;今天整理一下打算写一篇文章来总结一下&#xff0c;有需要开发朋友可以参考&#xff0c;我们下次遇到客户也可以直接转发文章给客户自己看。 我们根据我们自己报…

shardingsphere的IN查询导致数据库CPU打满

背景 上游系统进行并发压测批量查询接口&#xff0c;每次按照50个ID进行IN查询用户信息&#xff08;10个库20张表&#xff09;&#xff0c;在并发量并不大的情况导致数据库CPU达到100%并且重启。 ShardingSphere的版本为4.0.0 分析ShardingSphere的IN查询 通过下面测试发现sh…