3分钟弄懂c语言预处理

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

3分钟弄懂c语言处预处理
朱有鹏
1、预处理详解
1.1、c语言预处理的意义
编译器本身的主要目的是编译源代码,将C的源代码转化成.s的汇编代码。

编译器聚焦核心功能后,剥离出的一部分非核心的功能由预处理器执行,预处理器可以轻松完成一些特殊任务,预处理器对程序源码进行一些预先处理,为后续编译打好基础后,再由编译器编译。

预处理的意义就是使编译器实现功能变得更为专一。

1.2、预处理涉及的内容
(1)文件包含
(2)宏定义
(3)条件编译
(4)一些特殊的预处理关键字
预处理指令很多,例如#include(文件包含);#if#ifdef#ifndef #else#elif#endif(条件编译),#define宏的实现。

(5)去除程序注释
1.3、有关gcc编译来链接过程
(1)编译链接四个步骤的命令回顾
(1)预处理的命令实现:gcc-E*.c-o*.i
(2)编译命令实现:gcc-S*.c-o*.s
(3)汇编的命令实现:gcc-c*.c-o*.o
(4)链接的命令实现:gcc*.o-o*.out
(2)预处理举例
gcc编译时,通过设置一些编译参数,可以指定编译过程,譬如gcc xx.c-o xx可以指定可执行程序的名称(不指定名称是直接为a.out);譬如gcc xx.c-c -o xx.o可以指定只编译不连接,也可以生成.o的目标文件。

gcc-E xx.c-o xx.i可以只预处理。

在平时的开发中,我们常用这样的方法来理解程序,帮助调试程序。

通过执行
gcc-E preprocess.c-o preprocess.i
(只预处理不编译).
preprocess.i
typedef char*PCHAR
int main(int argc,char*argv[])
{
char*p3;
char*p1,p2;
return0;
}
例:
preprocess.c
#define pchar char*
typedef char*PCHAR
int main(int argc,char*argv[])
{
pchar p3;
pchar p1,p2;
return0;
}
上例中看出,宏定义被预处理时的现象有,第一,宏定义语句消失了,可见编译器根本就不认识#define,编译器根本不知道还有个宏定义,因为预处理器已经处理完成;第二,typedef重命名语言还在,说明它和宏定义是有本质区别的,说明typedef是由编译器来处理而不是预处理器处理的;。

相关文档
最新文档