c语言编译预处理

c语言编译预处理

ID:36292978

大小:4.00 MB

页数:37页

时间:2019-05-08

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

《c语言编译预处理》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、编译预处理C语言程序设计Lecture8宏定义“文件包含”处理条件编译介绍C语言的三种基本编译预处理结构对源程序进行处理教学目标2作用:对源程序编译之前做一些处理,生成扩展C源程序种类:宏定义#define文件包含#include条件编译#if--#else--#endif等格式:“#”开头占单独书写行语句尾不加分号3一、宏定义C语言中可以定义变量,但有时需要定义一些常量,且能象变量一样引用。宏定义就起这样的作用。C语言中有两种宏定义命令:带参数的宏定义不带参数的宏定义41、不带参数的宏定义不带参数的宏定义通常用来定义符号常数,其一般格式

2、为:#define宏名替换序列#define——是定义语句宏名——是一个标识符,一般用大写字符替换序列——是给标识符的值例如:#definePI3.1415926#defineEBSL1.0E-15使用时:if(xn<=EBSL)break;5带参数的宏定义其作用和使用方法类似函数,一般格式为:#define宏名(参数表)带参替换序列例如:#definemax(a,b)((a)>(b)?(a):(b))使用时,可以写成:x=max(a,10);x=((a)>(10)?(a):(10));2、带参数的宏定义63、宏定义注意事项定义的是符号常

3、数,不是变量。错误的用法:PI=PI*PI;引用时参数最好使用圆括号,用法:定义:#definecircle_area(r)r*r*PI使用:s=circle_area(x+16);转换结果为:s=x+16*x+16*PI;只有按下列方法定义才行:#definecircle_area(r)(r)*(r)*PI7宏定义注意事项(续一)反斜杠“”是继续行标志符。例如#definech(c)((c>=‘A’)&&(c<=‘Z’)字符串化操作符“#”,使被操作对象变为字符串。例如,#defineout(x)printf(#x)使用时,引用ou

4、t(It‘sright.);将被替换为:printf(“It‘sright.”);8#define命令出现在程序中函数的外面,宏名的有效范围为定义命令之后到本文件结束。可以使用#undef命令终止宏定义的作用。其格式为:#undef标识符当程序中使用#undef命令后,对应的宏定义便立刻失去了意义。宏定义注意事项(续二)9例:#definex100#definey200main(){printf(“%s%d”,“Beforeundef→”,x+y);#undefyprintf(“%s%d”,“Afterundef→”,x+y);/

5、*编译时,此处将出错*/}10在进行宏定义时,可以引用已定义的宏名。调用宏时,层层展开。#defineA3#defineBA*A语句x=B;相当于x=A*A;相当于x=3*3;宏定义注意事项(续三)11宏定义注意事项(续四)连接操作符“##”。用于生成C源代码序列。例如,定义宏#definechop(x)func##x调用语句为:called=chop(3)(q,w);处理时将被扩展为:called=func3(q,w);通过使用‘##’操作符,编译时就能确定调用那一个函数。12#definechop(x)func##x#defineou

6、t(x)printf(#x)main(){inta,b,called;scanf("%d%d",&a,&b);called=chop(3)(a,b);printf("called=%d",called);called=chop(4)(a,b);printf("called=%d",called);out(It'sright!);printf("");}13子函数func1(intx,inty){return(x>y?x:y);}func2(intx,inty){return(x+y);}func3(intx,inty){ret

7、urn(x*y);}func4(intx,inty){return(x/y);}144、宏和函数的区别带参宏函数处理时间编译时程序运行时参数类型无类型问题定义实参,形参类型处理过程不分配内存简单的字符置换分配内存先求实参值,再代入形参程序长度变长不变运行速度不占运行时间调用和返回占时间15例#definePRINT(K)printf("K=%dt",K)main(){inta,b;a=1;b=2;PRINT(a);PRINT(b);}运行结果:K=1K=2在宏定义#definePI3.14159中,用宏名PI代替一个():A)单精度数B

8、)双精度数C)常量D)字符串16#defineN2#defineY(n)((N+1)*n)main(){intz;z=2*(N+Y(5));printf("%d",z);}例运行结果:3417

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

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

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