如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
第10章编译预处理概述10.1文件包含“文件包含”示意图假如file1.c文件中的内容如下:inta,b,c;floatm,n,p;charr,s,t;file2.c文件的内容如下:#include"file1.c"main(){……}经过编译预处理后,file2.c文件的内容为:inta,b,c;floatm,n,p;charr,s,t;main(){……}包含文件的查找方法:在使用编译预处理#include语句时,需要注意的几个问题如下:根据经验的总结,以下内容放在头文件中比较合适。需要说明的是C语言对此没有强行的规定。①包含指令(嵌套),如:#include<stdio.h.>②函数声明,如:externfloatfun(floatx);③类型说明,如:enumbool{false,true}④常量定义,如:constfloatpi=3.14159;⑤数据声明,如:externintm;⑥宏定义,如:#definePI3.1415926;10.2.1无参宏定义引例:宏定义允许嵌套,在宏定义的字符串中可以使用已经定义的宏名。在宏展开中由预处理程序层层代换。例如:#defineN2#defineMN+1#defineNUM(M+1)*M/2⑵宏名用做代替一个字符串,不作语法检查;说明:10.2.2有参宏定义注意:#defineMAX(x,y)x>y?x:ymain(){intn1,n2;floatf1,f2;scanf("%d%d%f%f",&n1,&n2,&f1,&f2);printf("maxi=%dmaxf=%f",MAX(n1,n2),MAX(f1,f2));}10.2.3终止宏定义10.2.4带参数的宏替换与函数的主要区别例宏替换与函数调用的区别。#defineMUL(a,b)a+bintm(inta,intb){return(a*b);}main(){printf(“%d\n”,MUL(1+2,5-4));printf(“%d\n”,m(1+2,5-4));}程序的运行结果为:73原因显而易见,调用MUL宏时,计算的表达式是1+2*5-4,而调用m函数时,计算的表达式的是(1+2)*(5-4)。10.3条件编译#ifdef标识符程序段1#endif例1:#ifdefTURBO#defineintint#else#defineintshort#endif二、使用常量表达式的值作为编译条件带有#elif的条件编译程序举例:用同一程序实现大小写字母转换(若定义UP转换为大写)例输入一个口令,根据需要设置条件编译,使之在调试程序时,按原码输出;在使用时输出“*”号。例#ifdef和#ifndef的使用。#defineTED10main(){#ifdefTEDprintf(“hited\n”);#elseprintf(“hianyone\n’);#endif#ifndefRALPHprintf(“RALPHnotdefined\n”);#endif}10.4小结