6-1 C语言预处理理论

本文介绍了C语言从源码到可执行程序的过程,强调了预处理的重要性和作用,包括预处理的意义、常见预处理操作如#include、注释、条件编译和宏定义。还讲解了在gcc中如何进行只预处理不编译的操作,以用于程序调试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

六、C语言宏定义与预处理、函数和函数库

6.1.1 由源码到可执行程序的过程

(1)源码.c—>(预处理)—>预处理过的.i源文件—>(编译)—>汇编文件.s—>(汇编)—>目标文件.o—>(链接)—>elf可执行程序
(2)预处理用的是预处理器,编译用编译器,汇编用汇编器,链接用链接器,这几个工具再加上其它一些额外的会用到的可用工具,合起来叫编译工具链。GCC就是一个编译工具链。

6.1.2 预处理的意义

(1)编译器本身的主要目的是编译源代码,将C的源代码转化成.s的汇编代码。编译器聚焦核心功能后,就剥离出了一些非核心的功能到预处理器去了。
(2)预处理器帮编译器做一些编译前的杂事。

6.1.3 编程中常见的预处理

(1)#include (#include <>和#include “”的区别)
(2)注释
(3)#if #elif #endif #ifdef
(4)宏定义

6.1.4 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是由编译器来处理而不是预处理来处理的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

非主流的豆瓣

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值