资源描述:
《编译预处理与位运算.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第十章编译预处理与位运算【教学要求】1.了解预编译的概念,掌握宏定义的方法。2.了解“文件包含”与预处理的应用。3.了解条件编译的几种形式。4.掌握各种位运算符,运算规则和优先级。5.了解位运算的实际应用。6.了解位段的定义和应用。第十章编译预处理与位运算[教学要点]编译预处理宏定义文件包含条件编译位运算位段应用举例编译预处理一、含义:编译预处理是C编译系统的一个组成部分。二、目的:将预处理的结果和源程序一起再进行通常的编译处理,以得到目标代码。三、实现方法:通过使用几种特殊的命令,在进行程序的编译之前,先对这些特殊命令进行处理。四、主要内容:1.宏定义;2.文件包含;3.条件编译
2、.宏定义一、不带参数的宏定义:1、含义:用一个指定的标识符来表示一个字符串。2、格式:#define标识符字符串其中:“标识符”被称为宏。3、作用:使用户能以一个简单的名字代替一个长的字符串。4、实现:在预编译时将宏名替换成字符串(宏展开)。如:#definePI3.14159在程序中将标识符PI代替为“3.1415”这个字符串。5、应用举例:6、使用要点:例exp10_1:分析下列的程序:#definePI3.1415main(){floati,s,r,v;printf(“inputradius:”);scanf(“%f”,&r);i=2.0*PI*r;s=PI*r*r;v=3.
3、0/4*PI*r*r*r;printf(“i=%10.4fs=%10.4v=%10.4f”,i,s,v);}1.宏名一般都用大写字母表示,以区别于变量;2.宏定义只是用宏名替代一个字符串,减少了在程序中书写某些字符串的工作量,只是一个简单的代替,不作语法检查;3.宏定义不是语句,不必再其后加上“;”;4.#define命令出现在函数的外面,它的有效范围是定义之后到本源文件的结束;5.可以使用#undef命令终止宏定义的有效范围;6.在宏定义中可以进行多层的替代.#definreR3.0#definePI3.1415#defineL2*PI*R#defineSPI*R*R
4、main(){printf(“L=%fS=%f”,L,S);}二、带参数的宏定义1、定义:#define宏名(参数表)字符串例如:#defines(a,b)a*b….area=s(3,2);2、作用:不只是进行简单的字符串替换,还要进行参数的置换。3、应用举例:4、宏展开过程的要点:area=S(3,2)#defineS(a,b)a*b得3*2例exp10_2:分析程序写出结果.#definePI3.1415#defineS(r)PI*r*rmain(){floata,area;a=3.6;area=S(a);printf(“r=%farea=%f”,a,area
5、);}1.对于带参数的宏的展开依就是用实际参数代替宏定义时的形式参数;请注意与函数的调用存在差别。2.在宏定义时,宏名与带参数的括号之间不应加空格,不然的话,空格也作为字符的组成部分;3.在宏代换时,不应人为地加上括号.例exp10_3:分析程序写出结果.#defineM3#defineNM+2#defineS(N)N*N*Nmain(){printf(“%d”,S(N));}运行结果为:17文件包含1、含义:将一个源文件的内容完全包含在另一个文件之中.2、一般形式:#include“文件名”(或<文件名>)file1.cfile2.cfile1.c3、功能:可以节省程序设计
6、人员的重复劳动。4、应用举例:5、使用要点:#include“flie2.c”ABBA例exp10_3:分析程序写出结果:file.h#definePRprintf#defineNL‘’#defineD“%d”#defineD1DNL#defineD2DDNL#defineD3DDDNL#defineD4DDDDNL#defineS“%s”file.c#include“file.h”main(){inta,b,c,d;charstr[]=“CHINA”;a=1,b=2,c=3,d=4;PR(D1,a);PR(D2,a,b);PR(D3,a,b,c);PR(D4,a,b,c,d)
7、;PR(S,str);}1、一个#include命令只能指定一个被包含的文件,若要包含n个文件,应使用n个#include命令;2、若文件1包含文件2,而文件2中要用到文件3的内容,则可在文件1中用2个#include命令分别包含文件2和文件3,而且文件3应出现在文件2之前,如下表示:file1.c#include“file3.h”#include“file2.h”...3、文件包含可以嵌套。4、“”与<>在#include中的不同:使用“”时,系统若在源程序文件目录