第07章+编译预处理命令

第07章+编译预处理命令

ID:45156314

大小:83.00 KB

页数:18页

时间:2019-11-10

第07章+编译预处理命令_第1页
第07章+编译预处理命令_第2页
第07章+编译预处理命令_第3页
第07章+编译预处理命令_第4页
第07章+编译预处理命令_第5页
资源描述:

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

1、第7章编译预处理命令7.1宏定义7.2文件包含处理7.3条件编译◆“编译预处理”是C语言编译系统的一个组成部分。编译预处理是在编译前由编译系统中的预处理程序对源程序的预处理命令进行加工。■源程序中的预处理命令均以“#”开头,结束不加分号,以区别源程序中的语句,它们可以写在程序中的任何位置,作用域是自出现点到源程序的末尾。◆预处理命令包括执行宏定义(宏替换)、包含文件和条件编译。7.1宏定义7.1宏定义7.1宏定义一.简单宏定义■C语言的宏定义分为两种:简单宏定义与带参数的定义。◆宏定义的目的是允许程序员以指定标识符代替一个较复杂的字符串。◆语法形式:#defi

2、ne标识符字符串■#define为预编译符;◆标识符称为“宏名”,通常使用大写英文字母和有直观意义的标识符命名,以区别于源程序中的其它标识符;■字符串构成“宏体”,由ASCII字符集中的字符组成.宏定义的作用:宏定义后,该程序中宏名就代表了该字符串。#include#definePRICE500voidmain(){floatx,y;scanf("%f",&x);y=PRICE*x;printf("Thevalueis%f",y);}例7-1定义宏PRICE,宏名PRICE代表某商品单价,根据输入的数据求总值。(2)编译预处理时,将程序中

3、PRICE用500代替,与宏调用的过程相反,这种将宏名替换成字符串的过程称为“宏展开”。(1)使用宏名代替一个字符串,可以减少程序中重复书写某些字符串的工作量,增加程序的可读性,而且用宏名代替不易出错。7.1宏定义(3)C语言中,用宏名替换一个字符串是简单的转换过程,不作语法检查。若将宏体的字符串中符号写错了,宏展开时照样代入,只有在编译宏展开后的源程序时才会提示语法错误。例如:#defineE2.71828若把字母8写成B,即:#defineE2.71B2B预处理时照样替换,而不管其含义是否正确,一直到对宏展开的结果进行编译时,才会产生错误提示。(4)宏定义

4、命令行放在源程序的函数外时,宏名的作用域从宏定义命令行开始到本源文件结束。(5)宏名的作用域可以使用#undef命令终止,形式如下:#undef标识符(6)在宏定义中,允许在宏体字符串中使用已定义过的宏名,这个过程称为嵌套宏定义。7.1宏定义二.带参数的宏定义1.宏定义与调用#define标识符(形式参数表)字符串◆形式参数称为宏名的形式参数,简称形参;◆构成宏体的字符串中应该包含所指的形式参数;◆宏名与后续圆括号之间不能留空格。例如,求宏定义形式如下:宏调用:s1=SQ(5)s2=SQ(x+y)a1=AR(5,3)a2=AR(a+b,b+c)#defineS

5、Q(n)n*n#defineAR(a,b)a*b7.1宏定义2.宏展开◆带参数的宏展开是按#define命令行中指定的字符串从左到右进行置换。◆如果宏体字符串中包含宏名中的形参,则将程序语句中相应的实参代替形参,如果字符串中的字符不是参数字符,则保留。例7-2,求a,b,c三个数中最大者。#include#defineMAX(a,b)(a>b)?a:bvoidmain(){inta,b,c,max;scanf("%d%d%d",&a,&b,&c);max=MAX(a,b);max=MAX(max,c);printf("max=%d",ma

6、x);}462max=6程序运行结果:7.1宏定义但对于以下宏调用语句:s=SQ(p+q)/*原意求(p+q)2*/a=AR(a+b,b+c)/*原意求矩形的面积(a+b)*(b+c)*/按照宏展开的规则,从左到右依次替换宏体中的形参,展开为:s=p+q*p+qa=a+b*b+c注意:#defineSQ(n)(n)*(n)#defineAR(a,b)(a)*(b)此时宏展开上述两个宏调用,结果为:s=(p+q)*(p+q)a=(a+b)*(b+c)宏替换是直接替换7.1宏定义3.带参数的宏与函数的区别带参数的宏名与函数名相似,都是在宏名或函数名后跟一对圆括号;

7、带参数的宏调用形式与带参数的函数的调用形式类似,都要求实参个数、次序与对应的形参一致。但两者仍然存在着很大的不同。(1)宏定义与宏调用是为了减少书写量和提高运行速度;而函数定义、函数调用是为了实现模块程序设计,便于构造软件。(2)宏调用展开后的代码是嵌入源程序中的,且每调用一次,嵌入一次代码。因此,宏调用时总的程序代码是增加的;而函数调用是执行时转入对应的函数,执行后返回主调函数,无论调用多少次,函数体的代码都不会增加。所以函数也解决代码重用问题。7.1宏定义(3)宏定义的参数是字符,不需说明类型;而函数定义的参数是数据,不仅要说明其类型,而在调用时必须检查实

8、参与形参在类型上的一致性。具有不同实参

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

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

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