C和C++编译和链接原理

本文介绍了C/C++的编译过程,包括预编译、编译和链接三个阶段。预编译主要处理#define等预编译指令,编译阶段进行语法检查并生成obj文件,链接阶段则解决符号引用,确保所有函数和变量都有定义,最终生成可执行文件。通过理解这些步骤,有助于深入掌握C/C++的编译原理。
摘要由CSDN通过智能技术生成

文章目录


最近在修改产品的代码,增加一个额外的功能,每天陷入了 改代码–编译–数bug–改代码–编译 的循环。上大学时只学过一门课《C语言程序设计》,学完之后感觉自己好像懂了,看到一个程序大概知道每一部分在干嘛;但又好像啥都不懂,甚至在用IDE的时候都不是很明白compile和build的区别,现在想想,当时真是傻得可爱呀。

compile:仅编译cpp文件,生成对应的obj目标文件,但是并不对目标文件进行链接(即不会生成exe可执行文件);
build:编译并链接,最终生成可执行文件exe或者链接库文件lib或者dll.
rebuild:这个相当于clean+build,因为build命令一般仅对发生修改后的文件执行命令。有时工程出现了难以用理论解释的神奇bug时,rebuild一下可能就好了。

每天看着IDE consle里编译时输出的一行行结果,我就在想:这C++在编译的时候都干些啥啊?若干个cpp文件和hpp文件怎么就最后生成了一个exe可执行文件?花了一个小时的时间,我初步理解了C+\编译和链接的过程,其可分为 预编译–编译–链接 三个过程。

预编译

在上学时经常听老师讲#是预编译符号,后面跟的是预编译命令,如define,include,ifndef…define…endif等等。顾名思义,预编译是为编译过程做准备的,其实质是完成预编译命令的展开与替换。例如,#define PI 3.14,预编译则将文中所有的PI替换为PI,同时将符合条件的include内容展开到cpp文件中。</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值