谭浩强C语言配套课件C第六章.pptx
第七章编译预处理
«作用:对源程序编译之前做一些处理,生
成扩展C源程序
«种类
v宏定义#define
v文件包含#include
v条件编译#if--#else--#endif等
«格式:
v“#”开头
v占单独书写行
v语句尾不加分号
§7.1宏定义宏体可缺省,表示宏名
«不带参数宏定义定义过或取消宏体
v一般形式:#define宏名[宏体]
v功能:用指定标识符(宏名)代替字符序列(宏体)
v定义如位#置de:f任ine意(Y一E般S在1函数外面)
#defineNO0
v作用域#:d从ef定ine义命PI令到3.文14件15结926束
v#unde#f可de终fine止宏O名UT作例用pr#域indtef(fi“nHeelloY,WESorld”);1
格式:宏名main()
例例##d#uedfniendfeienefWIWDITDHT{H…8…08.0.YES原作用域
()
v宏展开:预#d#编edfien译fein时eLE,用LNEG宏NT}G体HTH替W换IWDIT宏DHT名+H4+0-4--0不作语法检查
vavr=aLr=ELNEGNTGHT*H2#;*2u;ndefYES
v如
引号中宏的宏展内if展开(x容开:==:与vYaEvr宏=aSr)8=名0+8相(400+#同4d*p20e也r;f)i*inn2不te;f(“置cYor换EreSct!\0n”);
elseif(x==NO)mapxr(in)tf(“error!\n”);
v宏展开定后义:可嵌套,不能递归YES新作用域
例#deif(inxe==1P)I3.14p1{r5…in9t…f(“.c.orrect!\n”);
v例宏定#d义efpi中nriene使tfl(sM“用e2A*ifPX必(Ix=要=%=Mf的0\An)”X括,P+}pI号1*r02in)(;tf()“error!\n”)(;)
宏展开:printf(“2*PI=%f\n”,3.14159*2);
«带参数宏定义
v一般形式:#define宏名(参数表)宏体
例#defineS(a,b)a*b不能加空格
………..
area=S(3,2);
宏展开:area=3*2;
v宏展开:形参用实参换,其它字符保留
v宏体及各形参外一般应加括号()
例#defineS(r)PI*r*r
相当例于定#d义ef了ine不带PO参W宏ESR,代(x)表字x符*x串“(r)PI*r*r”
x=4;y=6;
z=POWER(x+y);
宏展开:z=x+y*x+y;
一般写成:#definePOWER(x)((x)*(