《_编译预处理.ppt》由会员分享,可在线阅读,更多相关《_编译预处理.ppt(12页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第十四章编译预处理第一节宏替换第二节文件包含第一节宏替换1.1不带参数的宏定义 1.2带参数的宏定义1.3终止宏定义总目录总目录1.1不带参数的宏定义例:#definePI3.1415926格式:#define宏名 替换文本 宏替换:预编译时,将源程序中出现的宏名用替换文本替换。宏定义实例#definePI3.1415926main()floatc,s,r10;c=2.0*PI*r;s=PI*r*r;printf(“%f,%f”,c,s);c=2.0*3.1415926*rs=3.1415926*r*r宏定义注意事项1#define宏名替换文本1、宏定义的定义位置一般放在程序的开头。#defi
2、nePI3.14159262、宏名一般用大写字母表示。3、宏定义不是C语句,后面不能有分号;若加入分号,则连分号一起替换。宏定义注意事项2、续行符“”#defineAi%7=0i%11=0&i%77=05、宏替换是在编译时由预处理程序完成,因此宏替换不占用运行时间。宏定义注意事项3例:#definePI3.14#defineAPI(PI+1)#defineTWO_API(2+API)求x=TWO_API/2x=TWO_API/2(2+API)/2(2+(PI+1)/2(2+(3.14+1)/2去括号?x=TWO_API/22+API/22+(PI+1)/22+(3.14+1)/2宏替换时,不能
3、随意增减括号。去括号?考试重点分目录分目录1.2带参数的宏定义 例:#defineS(a,b)a*b#define宏名(形参表)替换文本宏带参数的宏定义实例#defineS(a,b)a*bmain()floatarea=S(3,2);printf(%fn,area);area=S(3,2)area=a*barea=3*2输出:6.000000实例 1):#defineMU(x,y)(x)*(y)a=MU(5 a=MU(5,2)2);b b6 6MU(a+3,a);MU(a+3,a);a=MU(5a=MU(5,2)2)b=6b=6MU(a+3,a)MU(a+3,a)2)2):#define MU
4、(xdefine MU(x,y)x*yy)x*yb=6b=6MU(a+3MU(a+3,a)a)a=(5)*(2)a=(5)*(2)a=10a=10b=6/(a+3)*(a)b=6/(a+3)*(a)b=0b=6b=6a+3*aa+3*ab=30宏替换时,不能随意增减括号。其它注意事项参见不带参数的宏替换。分目录分目录1.3终止宏定义#definePI3.1415926main()floats,c,r=10;scanf(%f,&r);s=PI*r*r;#undefPIc=2*PI*r;作用域:定义位置到文件末尾。宏定义的定义位置一般放在程序的开头。分目录分目录undef:终止宏定义。第二节文件包含#include include 文件名文件名 或include include 双引号双引号:系统先到当前目录下查找被包含文件,若没找到,再到系统指定的“包含文件目录”去查找。尖括号尖括号:直接到系统指定的“包含文件目录”去查找。一般地说,使用双引号比较保险。总目录总目录