第7章编译预处理.ppt
《第7章编译预处理.ppt》由会员分享,可在线阅读,更多相关《第7章编译预处理.ppt(14页珍藏版)》请在三一文库上搜索。
1、,第七章,编译预处理,所谓预处理是指,在对源程序进行编译之前,先对源程序中的预处理命令(主要指宏定义命令、文件包含命令和条件编译命令)进行处理;然后再将处理的结果,和源程序一起进行编译,以得到目标代码。,预处理,宏定义 文件包含 条件编译,define #include,为了和一般C语句相区别,这些命令以符号#开头。,7.1.1 不带参数的宏定义(简单替换),用标识符来代表一个字符串(给字符串取个名字)。C语言用“#define”进行宏定义。C编译系统在编译前将这些标识符替换成所定义的字符串。,概念,格式,define 标识符 字符串,相关概念,宏名:宏定义中的标识符称为“宏名”。 宏展开:在
2、预编译时将宏名替换成字符串的过程称 为“宏展开”。,#define PI 3.1415926,7.1 宏定义,#include #define PI 3.1415926 void main( ) float radius,length,area,volume; printf(“Input a radius: “); scanf(“%f“, ,例7.1 输入圆的半径,求圆的周长、面积和球的体积。要求使用无参宏定义圆周率。,1、宏名遵循标识符规定,习惯用大写字母表示,以便区别普通的变量。 2、#define之间不留空格,宏名两侧空格(至少一个)分隔。 3、宏定义字符串不要以分号结束,否则分号也作为
3、字符串的一部分参加展开。从这点上看宏展开实际上是简单的替换。,说明,#define PI 3.14; area=PI*r*r;,area=3.14;*r*r;,4、宏定义是预处理指令,与定义变量不同,它只是进行简单的字符串替换,不分配内存。 5、宏定义用宏名代替一个字符串,并不管它的数据类型是什么,也不管宏展开后的词法和语法的正确性,只是简单的替换。是否正确,编译时由编译器判断。 例如: #define PI 3.I4 照样进行宏展开(替换),是否正确,由编译器来判断。 6、#define命令出现在程序中函数的外面,宏名的有效范围从定义命令开始直到本源程序文件结束。可以通过#undef终止宏名
4、的作用域。,#define G 9.8 #define PI 3.14 int f1( ) #undef G void main( ) ,7、宏定义时,可以引用已 定义的宏名,可以层层置换。 若宏名出现在双引号“”括起 来的字符串中时,将不会产 生宏替换。,#define R 3.0 #define PI 3.14 #define L 2*PI*R #define S PI*R*R void main() printf(“L=%fnS=%fn”,L,S); ,printf(“L=%fnS=%fn”,2*3.14*3.0 , 3.14*3.0*3.0);,7.1.2 带参数的宏定义,带参数的宏定
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 预处理
链接地址:https://www.31doc.com/p-2120920.html