01. C++是如何工作的

1.C++是如何工作的

2.编译

3.链接


1.C++是如何工作的

csharp 复制代码
a.预处理

编译器收到源文件后, 一看到这条语句, 就先处理这些语句, 在实际编译发生前就处理这些语句

常见的预处理语句: #include, #define, #if def #pragma

#include找到这个文件, 将这个文件的所有内容拷贝到现在的文件

b.当预处理语句被处理后, 文件被编译, 编译器将所有c++代码转换为目标文件, 使用vs生成的

文件后缀是obj; 存在某些重要的设置决定我们怎么转化代码

- 解决方案配置: 构建项目的规则

- 解决方案平台: 32位操作系统还是64位操作系统

c.link是将obj文件合并成一个执行文件(exe), vs中ctrl + F7用于单独编译cpp文件; 函

数声明表示函数存在, 定义表示函数体; 链接寻找函数的定义和程序的入口点

2.编译

csharp 复制代码
核心作用: 将预处理后的文件翻译成汇编语言代码, 然后将汇编语言代码翻译成二进制码, 生成

目标文件(windows .obj后缀), 具体操作:

a.语法分析

检查代码是否符合c++语法规则(比如少分号, 括号不匹配都会在此报错)

b.语法分析

检查代码逻辑合理性(比如变量未声明就使用, 类型不匹配)

c.优化

对代码进行编译优化(比如死代码消除, 提升运行效率)

d.生成汇编代码

将合法的c++代码转化为对应cpu架构的汇编指令

e.将汇编代码翻译成二进制码, 生成目标文件

3.链接

csharp 复制代码
a.核心作用: 将多个目标文件(自己写的 + 系统/第三方库的目标文件)合并, 解析符合引用, 

生成可执行文件; 比如你的代码中调用了cout(属于c++标准库), 链接器会找到标准库的目标文

件, 把cout的实现和你的代码合并, 解决"未定义引用"问题

b.链接分为两种类型

- 静态链接: 把库的代码直接复制到可执行文件中(体积大, 运行时不依赖库文件, 后缀 .a / 

.dll)

- 动态链接: 只记录库的引用(体积小, 运行时需要依赖动态库文件, 后缀.so/.dll)
csharp 复制代码
c.常见的链接错误

- 未解决的外部符合unresolved external symbol表示链接器找不到它需要的东西时发生

- 存在重复的符合, 函数或变量有相同的名字和相同的签名
csharp 复制代码
还可以通过inline内联函数, 将函数调用替换为函数体
相关推荐
程序猿乐锅几秒前
【从0-1学习Python | 第四篇】Python 字符串和元组
java·开发语言·笔记·后端·python·学习
开开心心就好4 分钟前
Windows视频播放器推荐,精简版体积更小
java·服务器·开发语言·eclipse·pdf·ocr·音视频
开开心心就好4 分钟前
A3的PDF怎么切成A4?拖一下分割线就行
服务器·开发语言·python·算法·pdf·ocr·tornado
小黄人软件5 分钟前
python 模块(Module)与包(Package)的区别,python xxx.py、python -m xxx 和 import xxx 三者的区别
开发语言·python
PHP实战开发录6 分钟前
PHP中文文件名为什么乱码
开发语言·php
沫璃染墨11 分钟前
从零入门计算机网络系列(五):UDP套接字编程实战——从核心API到客户端与服务器通信
linux·网络·c++·vscode·网络协议·udp
阿里嘎多学长29 分钟前
2026-10-13 GitHub 热点项目精选
开发语言·程序员·github·代码托管
巧克力味的桃子37 分钟前
复杂网络能控性鲁棒性研究进展
开发语言·网络·php
普通人61 小时前
php处理百度编辑器有误html
开发语言·编辑器·html·php·1024程序员节
hetao17338371 小时前
联盟场-提高组-R4 & ZYZSC-S-Round 7
c++·算法