news 2026/2/5 18:16:36

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/2/5 1:36:10

ST7735电源管理模块详解超详细版

ST7735电源管理深度实战:如何让TFT屏功耗从30mA降到2μA?你有没有遇到过这样的情况?项目快收尾了,测试电池续航时却发现——明明MCU已经进入Deep Sleep,电流也压到了几微安,可整机待机电流还是下不去。一查…

作者头像 李华
网站建设 2026/2/3 1:12:54

从STM32视角看CANFD和CAN的区别:通俗解释带宽差异

从STM32视角看CAN FD与经典CAN的差异:一场关于带宽、效率和未来的对话 你有没有遇到过这样的场景? 在调试一个基于STM32的电池管理系统时,主控MCU需要从多个从节点读取电压、温度和SOC数据。每帧只有8字节的经典CAN协议,逼得你不…

作者头像 李华
网站建设 2026/2/5 3:40:42

[特殊字符]_可扩展性架构设计:从单体到微服务的性能演进[20260110164857]

作为一名经历过多次系统架构演进的老兵,我深知可扩展性对Web应用的重要性。从单体架构到微服务,我见证了无数系统在扩展性上的成败。今天我要分享的是基于真实项目经验的Web框架可扩展性设计实战。 💡 可扩展性的核心挑战 在系统架构演进过…

作者头像 李华
网站建设 2026/2/4 2:43:08

C++ 变量作用域

局部变量局部变量在函数或代码块内部声明&#xff0c;仅在该函数或代码块内有效。生命周期从声明开始到代码块结束。例如&#xff1a;void func() {int x 10; // 局部变量cout << x; // 有效 } // cout << x; // 错误&#xff1a;x在此处不可见全局变量全局变量…

作者头像 李华
网站建设 2026/2/4 16:25:34

人类有史以来最伟大的10大壮举与天问一号

文章目录1. 人类有史以来最伟大的10大壮举&#xff08;按影响与突破排序&#xff09;2. 天问一号时间线&#xff08;含关键节点&#xff09;1. 人类有史以来最伟大的10大壮举&#xff08;按影响与突破排序&#xff09; 生命科学&#xff1a;人类基因组计划&#xff08;2003&…

作者头像 李华
网站建设 2026/2/3 13:30:32

S32DS使用一文说清:S32K GPIO外设初始化步骤

S32DS实战指南&#xff1a;从零搞懂S32K GPIO初始化全流程你有没有遇到过这样的情况——代码烧进去&#xff0c;LED就是不亮&#xff1f;按键按烂了也没反应&#xff1f;调试半天才发现&#xff0c;原来是某个时钟没开、引脚复用配错了&#xff0c;或者方向寄存器写反了。这种低…

作者头像 李华