预处理都干了啥?

前言:大家知道一个程序要想执行,需要经过几个步骤:预处理,编译,汇编,链接器,然后生成执行性文件,前面我的一篇文章大概写了编译的过程干了啥,今天写一下,预处理过程做了什么。

 =================正文========================

预处理过程如下:

1.头文件展开ps把#include的文件插入到相应位置

2.宏展开ps展开所有的宏,并删除#define

3.条件编译ps条件预编译指令比如:#if,#ifdef,#else

4.删除注释ps  // /**/的内容

5.添加行号和文件名标识

6.保留#pragrma命令ps指示编译器完成特定的动作

其实归根到底一句话,就是文本替换 宏命令展开。

正如Linux源码中那样,大量的使用宏定义,条件编译,头文件包含。其实不是没有道理的,使用宏定义在编程的时候方便,程序执行效率高。条件编译的好处是可以更好的兼容各个平台。头文件包含体现了模块化编程的思想。

下面简单写个小程序测试一下预编译效果

 

上面程序包含头文件,宏定义,预编译,和#pragma通过命令gcc -E test.c > example.i重定向生成.i文件,然后打开预编译代码文件如下所示。

 

然后输出内容如下:

test.c:22:9: note: #pragma message: test demo

 #pragma message("test demo\n")

小伙伴发现没    #pragma message("test demo\n")这个就是编译时指示编译器完成的动作,回去查看代码。

总结:其实预处理比较简单,完成的工作很固定,这篇文章就是简单粗略的分析一下预处理过程,在以后的调试过程很有用。

老九学堂会员出品

作者:快乐的镜子

猜你喜欢

转载自www.cnblogs.com/ljxt/p/11579806.html