news 2026/4/18 12:30:16

01. C++是如何工作的

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
01. C++是如何工作的

1.C++是如何工作的

2.编译

3.链接


1.C++是如何工作的

a.预处理 编译器收到源文件后,一看到这条语句,就先处理这些语句,在实际编译发生前就处理这些语句 常见的预处理语句:#include,#define,#ifdef #pragma#include找到这个文件, 将这个文件的所有内容拷贝到现在的文件b.当预处理语句被处理后,文件被编译,编译器将所有c++代码转换为目标文件,使用vs生成的 文件后缀是obj;存在某些重要的设置决定我们怎么转化代码-解决方案配置:构建项目的规则-解决方案平台:32位操作系统还是64位操作系统 c.link是将obj文件合并成一个执行文件(exe),vs中ctrl+F7用于单独编译cpp文件;函 数声明表示函数存在,定义表示函数体;链接寻找函数的定义和程序的入口点

2.编译

核心作用:将预处理后的文件翻译成汇编语言代码,然后将汇编语言代码翻译成二进制码,生成 目标文件(windows.obj后缀),具体操作:a.语法分析 检查代码是否符合c++语法规则(比如少分号,括号不匹配都会在此报错)b.语法分析 检查代码逻辑合理性(比如变量未声明就使用,类型不匹配)c.优化 对代码进行编译优化(比如死代码消除,提升运行效率)d.生成汇编代码 将合法的c++代码转化为对应cpu架构的汇编指令 e.将汇编代码翻译成二进制码,生成目标文件

3.链接

a.核心作用:将多个目标文件(自己写的+系统/第三方库的目标文件)合并,解析符合引用,生成可执行文件;比如你的代码中调用了cout(属于c++标准库),链接器会找到标准库的目标文 件,把cout的实现和你的代码合并,解决"未定义引用"问题 b.链接分为两种类型-静态链接:把库的代码直接复制到可执行文件中(体积大,运行时不依赖库文件,后缀.a/.dll)-动态链接:只记录库的引用(体积小,运行时需要依赖动态库文件,后缀.so/.dll)
c.常见的链接错误-未解决的外部符合unresolved external symbol表示链接器找不到它需要的东西时发生-存在重复的符合,函数或变量有相同的名字和相同的签名

还可以通过inline内联函数,将函数调用替换为函数体
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 7:41:38

Keil5下C程序编译错误排查:深度剖析常见问题

Keil5下C程序编译错误排查:从“红字满屏”到一键构建成功的实战指南你有没有过这样的经历?写完一段自认为逻辑完美的代码,信心满满地点击Build,结果“Build Output”窗口瞬间弹出十几条红色错误信息——identifier not defined、f…

作者头像 李华
网站建设 2026/4/18 4:33:17

软件I2C在STM32上的实现:手把手教程(从零开始)

软件I2C在STM32上的实现:从协议到代码的深度实践 你有没有遇到过这样的场景?项目已经进入PCB布线阶段,突然发现硬件I2C引脚被串口占用了;或者多个传感器都需要接入I2C总线,但MCU只提供一路I2C外设。更糟的是&#xff0…

作者头像 李华
网站建设 2026/4/18 11:57:17

【Linux运维大神系列】Kubernetes详解3(kubeadm部署k8s1.23高可用集群)

目录 kubernetes集群规划 集权前期环境准备 1.修改每个节点主机名 2.配置集群本地解析 3.开启bridge网桥过滤 4.配置ipvs功能 5.关闭SWAP分区 docker环境准备 1.安装docker 2.配置Cgroup驱动程序 HAProxy及keepalived部署 1.下载软件 2.修改haproxy配置文件 3.启…

作者头像 李华
网站建设 2026/4/18 4:34:34

STM32CubeMX初学者指南:零基础快速理解开发流程

从零开始玩转STM32:CubeMX带你跳过寄存器深坑,快速点亮第一个外设你有没有过这样的经历?翻开厚厚的数据手册,面对密密麻麻的寄存器定义和时钟树结构图,心里直打鼓:“这玩意儿真的能看懂吗?”尤其…

作者头像 李华
网站建设 2026/4/18 8:39:49

在Arduino中实现SSD1306动画效果:操作指南

在Arduino上玩转SSD1306动画:从内存困局到丝滑播放的实战全解析你有没有试过在一块小小的OLED屏上放“视频”?不是开玩笑——用Arduino驱动一块12864的SSD1306屏幕,确实能实现接近动画的效果。虽然它没有操作系统、没有GPU,RAM还不…

作者头像 李华
网站建设 2026/4/18 8:51:18

计算机毕业设计springboot基于vue的网上订餐系统 SpringBoot+Vue智慧餐饮在线点餐平台 Vue与SpringBoot融合的云餐厅即时订餐系统

计算机毕业设计springboot基于vue的网上订餐系统ly71oso3 (配套有源码 程序 mysql数据库 论文) 本套源码可以在文本联xi,先看具体系统功能演示视频领取,可分享源码参考。快节奏的都市生活把“吃饭”这件小事也推上了数字化快车道:…

作者头像 李华