第5章 C语言的编译预处理

第5章 C语言的编译预处理

ID:40231121

大小:324.00 KB

页数:14页

时间:2019-07-27

第5章 C语言的编译预处理_第1页
第5章 C语言的编译预处理_第2页
第5章 C语言的编译预处理_第3页
第5章 C语言的编译预处理_第4页
第5章 C语言的编译预处理_第5页
资源描述:

《第5章 C语言的编译预处理》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、第五章编译预处理5.1宏定义5.2文件包含5.3条件编译1“编译预处理”是C语言编译系统的一个组成部分。是在编译前由编译系统中的预处理程序对源程序的预处理命令进行加工。概 述作用:对源程序编译之前做一些处理,生成扩展C源程序种类:宏定义#define文件包含#include条件编译#if--#else--#endif等格式:“#”开头占单独书写行语句尾不加分号2一般形式:#define宏名[宏体]功能:用指定标识符(宏名)代替字符序列(宏体)定义位置:任意(一般在函数外面,且通常放在程序的开头)作用域:从定义命令到文件结束说明:宏定义是用宏名来表示一个字符串,在宏展开时又以该字符串取代宏名,

2、这只是一种简单的符号替换,不作语法检查宏定义不是C说明或语句,在行末不必加分号。宏名在源程序中若用引号括起来,则预处理程序不对其作宏代换。宏定义可嵌套,不能递归习惯上宏名用大写字母表示,以便于与变量名区别。宏定义中使用必要的括号()#undef可终止宏名作用域格式:#undef宏名宏体可缺省,表示宏名定义过或取消宏体#defineR3.0#definePI3.1415926#defineL2*PI*R/*宏体是表达式*/#defineSPI*R*R#defineMAXMAX+10()5.1.1无参宏定义5.1宏定义main(){printf("L=%fS=%f",L,S);/*2*

3、PI*R替换L,PI*R*R替换S*/}程序运行结果如下:L=18.8495563一般形式:#define宏名(参数表)宏体例#defineS(r)PI*r*r相当于定义了不带参宏S,代表字符串“(r)PI*r*r”宏展开:宏名被所定义的宏体替换,宏体中的形参按从左到右的顺序被实参替换。例#defineS(a,b)a*b………..area=S(3,2);宏展开:area=3*2;不能加空格例#definePOWER(x)x*xx=4;y=6;z=POWER(x+y);宏展开:z=x+y*x+y;一般写成:#definePOWER(x)((x)*(x))宏展开:z=((x+y)*(x+y));

4、5.1.2带参宏定义5.1宏定义宏体及各形参外一般应加括号()#definePR(x)printf(“s=%f”,x)PR(area)展开的结果是:printf("s=%f”,area);#definesqu(n)n*nvoidmain(void){printf(“%f”,27.0/squ(3.0));}输出结果为:27.000000注意,展开为27.0/3.0*3.0不是27.0/(3.0*3.0)4#defineMAX(x,y)(x)>(y)?(x):(y)…….main(){inta,b,c,d,t;…….t=MAX(a+b,c+d);……}宏展开:t=(a+b)>(c+d

5、)?(a+b):(c+d);intmax(intx,inty){return(x>y?x:y);}main(){inta,b,c,d,t;…….t=max(a+b,c+d);………}例用宏定义和函数实现同样的功能5.1宏定义5带参宏函 数不分配内存简单的字符置换分配内存先求实参值,再代入形参编译时程序运行时无类型问题定义实参,形参类型变 长不 变不占运行时间调用和返回占时间处理过程处理时间参数类型程序长度运行速度带参的宏与函数区别5.1宏定义6功能:一个源文件可将另一个源文件的内容全部包含进来一般形式:#include“文件名”或#include<文件名>处理过程:预编译时,用被包含文件的内

6、容取代该预处理命令,再对“包含”后的文件作一个源文件编译#include“file2.c”file1.cfile2.cfile1.cfile2.cABA<>直接按标准目录搜索“”先在当前目录搜索,再搜索标准目录可指定路径5.2文件包含7源文件(*.c)头文件(*.h)宏定义数据结构定义函数说明等文件包含可嵌套#include“file2.c”file1.cAfile3.cC#include“file3.c”file2.cBfile1.cAfile3.cfile2.c被包含文件内容5.2文件包含8/*powers.h*/#definesqr(x)((x)*(x))#definecube(x)(

7、(x)*(x)*(x))#definequad(x)((x)*(x)*(x)*(x))#include#include"d:fengyibkcpowers.h"#defineMAX_POWER10voidmain(){intn;printf("numbertexp2texp3texp4");printf("----t----t-----t------");for(n

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。