编译流程与预处理

简介: 编译流程与预处理

前言

之前在编码方向的学习都是在非常方便的编译器上进行的,直到一次gcc -v -o我才了解到编译器在我们写完代码之后做了非常多的事情,了解了这些之后也让我对之前很多的错误理解的更加通透,希望下面对编译器的介绍能给新手们一点指导(下面以c语言展开)


一、基本的编译步骤

cc1     .c -------> DNZ4.s                普通语言------编译(操作)------汇编语言

as       DNZ4.s-------->BW16.o        汇编语言-------汇编(操作)-------机器指令集

collect2       *.o(有好多)-------->  .exe        机器指令集--------链接 确定数据地址---------可执行文件

这三步里先阶段我们的错误大部分是在第一步,也就是语法错误,但随着学习的深入我们在第三步也是会出现错误的。

二、预编译

在编译器编译代码之前,类似printf这种关键字其实编译器是不认识的,这时候我们一般都是引用头文件去让编译器“学习”到这些关键字,预处理的符号就是#,就是在编译之前让编译器提前学习到一些关键字,这里分为头文件的预处理。

通过控制台对文件实现预处理之后,可以发现产生了一个 .i 的文件,文件里面已经用define定义的宏值替换代码里的宏名

我觉得非常变态的面试题:以下写法是否正确?

int define

一般关键字是不能拿来当变量名的,但是include,define这种必须要变成#define,#include才算是关键字,所以以上的写法是正确的!

以上的预处理指令新手平时见到的会非常多,下面的条件编译对于我这种非科班来说之前是未了解过的,但是在了解了这样的方法之后感觉真的是太方便了,有一种相见恨晚的感觉。

下面我们模拟一个场景,开发过程中我们为了调试,printf了很多数据来监测后台数据,但是产品发布的时候我们要尽量的缩小运行内存,不让这些printf执行,按照我之前的习惯就是一句一句把printf注销掉,但其实我们可以通过预处理很好的解决这个问题

这句话的意思是,如果我们定义过DEBUG那我们if判断成功,未定义过则进入else里的语句

这时候我们如果想检测后台数据,可以直接在代码上加一个#define DEBUG来触发if条件,不过这不是最好的方法(动了别人的代码),最好的办法是在编译上面做操作,这时候我们不要直接使用编译器给的默认的编译,cmd打开命令提示符面板,在编译语句前的--中间插入D加上你ifdefine后面的符号(D跟后面的符号是紧挨的),像如上我就应该写成 -DDEBUG -,如果这个.c文件叫a.c的话编译语句就是如下的。  


总结

了解编译器的编译流程能在以后解决问题的时候有更多的思路,也能对之前的问题有更好的理解,预处理的很多操作给我写项目的时候带来了极大的便利,慢慢了解自己使用的工具也是学习非常重要的一部分。

相关文章
|
前端开发 JavaScript 测试技术
前端研发链路之代码规范
大家好,我是徐徐。本文将探讨前端研发链路中的代码规范,包括业界流行规范、CSS命名规范和相关工具。通过保持代码整洁和一致性,不仅能提高团队协作效率,还能减少错误,提升开发质量。文中详细对比了几种常见的代码规范和工具,如 Airbnb Style Guide、BEM、Eslint 和 Prettier,并展望了未来代码规范的发展趋势。希望对大家有所帮助。
290 1
前端研发链路之代码规范
|
网络协议 数据挖掘 5G
适用于金融和交易应用的低延迟网络:技术、架构与应用
适用于金融和交易应用的低延迟网络:技术、架构与应用
608 5
|
机器学习/深度学习 人工智能 自然语言处理
音频基座大模型FunAudioLLM评测
通义语音团队最新开源了音频基座大模型FunAudioLLM,包含两大模型SenseVoice和CosyVoice。本文对这两种大模型进行整体的评测。
647 1
音频基座大模型FunAudioLLM评测
|
机器学习/深度学习 算法 5G
|
机器学习/深度学习 算法 机器人
相隔3000英里,用苹果头显遥控机器人!UCSD、MIT华人团队开源TeleVision
【7月更文挑战第19天】UCSD和MIT华人团队开发的TeleVision技术实现了远程操控机器人。借助AR/VR,操作者通过头显设备获得实时的机器人视角,并通过手势控制执行任务。系统支持多人协作,已在远距离实验中成功导航复杂环境。不过,高带宽需求和交互学习曲线是挑战。[论文链接](https://robot-tv.github.io/resources/television.pdf)**
340 14
|
自动驾驶 物联网 5G
波束成形技术在5G中的关键作用
波束成形技术在5G中的关键作用
420 0
|
机器学习/深度学习 人工智能 自然语言处理
未来智能交互:AI技术的进展与应用展望
随着人工智能(AI)技术的迅猛发展,智能交互系统正逐步成为日常生活和工作中不可或缺的一部分。本文探讨了AI技术在智能交互领域的最新进展,以及未来可能的应用前景,涵盖了语音识别、自然语言处理和智能助理等关键技术的演进与应用案例。 【7月更文挑战第3天】
1020 0
|
弹性计算
阿里云服务器ip地址是多少啊怎么查看?
阿里云服务器ip地址是多少啊怎么查看?
789 2
|
存储 XML JSON
MISP - 恶意软件信息共享平台和威胁共享
版权声明:转载请注明出处:http://blog.csdn.net/dajitui2024 https://blog.csdn.net/dajitui2024/article/details/79396464 参考:https://github.com/MISP/MISP MISP,恶意软件信息共享平台和威胁共享是一个开源软件解决方案,用于收集,存储,分发和共享网络安全指标,并对网络安全事件分析和恶意软件分析构成威胁。
3634 0