[DSP编程]

C语言预处理理论

[复制链接]
438|0
手机看帖
扫描二维码
随时随地手机跟帖
蒋博1026|  楼主 | 2019-11-25 09:25 | 显示全部楼层 |阅读模式
C语言预处理理论
1、从源码到可执行文件的过程
(1)源码.c->(编译)->elf可执行程序
(2)源码.c->(编译)->目标文件.o->(链接)->elf可执行程序
(3)源码.c->(编译)->汇编文件.s->(汇编)->目标文件.o->(链接)->
(4)源码.c->(预处理)->预处理过的.i源文件->(编译)->汇编文件.s->(汇编)->目标文件.o->(链接)->elf可执行程序
2、预处理用预处理器,编译用编译器,汇编用汇编器,链接用链接器,这几个工具再加上一些其他的额外会用到的可用工具,
合起来叫编译工具链。gcc就是一个编译工具链。
3、预处理的意义
(1)编译器本身的主要目的是编译源代码,将C的源代码转化成.S的汇编代码。编译器聚焦核心功能后,就剥离出了一些
非核心的功能到预处理器去了。
(2)预处理帮编译器做一些编译前的杂事。
4、编程中常见的预处理
(1)#include(#include <>和#include""的区别)
(2)注释
(3)#if #elif #endif #ifdef
(4)宏定义
5、gcc中只预处理不编译的方法
(1)gcc编译时可以给一些参数来做一些设置,譬如gcc xx.c -o xx可以指定可执行程序的名称,譬如gcc xx.c -c -o xx.o
可以指定只编译不链接,也可以生成.o的目标文件。
(2)gcc -E xx.c -o xx.i可以实现只预处理不编译。一般情况下,没必要只预处理不编译,但是有时候这种技巧可以帮助我们
研究预处理过程,帮助debug程序。
总结:宏定义被预处理时的现象有:第一,宏定义语句不见了(可见编译器根本就不认识#define);第二,typedef重命名语句
还在,说明他和宏定义是有本质区别的(说明typedef是由编译器来处理而不是预处理器处理的)。



使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

323

主题

1827

帖子

18

粉丝