八章编译预处理语言.pptxVIP

  1. 1、本文档共23页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

1第八章编译预处理

2高级语言编译过程源程序(文本文件)*.C目标文件(二进制文件)*.OBJ可执行文件(二进制文件)*.EXE库文件(各种函数)编译连接编译预处理C语言提供的编译预处理的功能有以下三种:宏定义文件包含条件编译编译预处理

3宏定义不带参数的宏定义用一个指定的标识符(即名字)来代表一个字符串,以后凡在程序中碰到这个标识符的地方都用字符串来代替。这个标识符称为宏名,编译前的替代过程称为“宏展开”。#define标识符字符串

4#definePRICE30voidmain(void){intnum,total;/*定义变量*/num=10;/*变量赋值*/total=num*PRICE;couttotal=“totalendl;}编译前用30替代编译程序将宏定义的内容认为是字符串,没有任何实际的物理意义。

51、宏展开只是一个简单的“物理”替换,不做语法检查,不是一个语句,其后不加分号“;”注意:2、#define命令出现在函数的外面,其有效范围为定义处至本源文件结束。可以用#undef命令终止宏定义的作用域。#defineG9.8voidmain(void){.....}#undefGintmax(inta,intb){......}

63、对程序中用双引号括起来的字符串内容,即使与宏名相同,也不进行置换。4、在进行宏定义中,可以用已定义的宏名,进行层层置换。

7#defineR3.0#definePI3.1415926#defineL2*PI*R#defineSPI*R*Rvoidmain(void){printf(L=%fS=%f\n,L,S);}不置换不置换层层置换层层置换

8带参数的宏定义#define宏名(参数表)字符串#defineS(a,b)a*b....floatx,y,area;scanf(%f%f,x,y);area=S(x,y);/*area=x*y;*/形式参数实际参数宏定义宏调用定义的宏实参代入后还原

9按#define命令行中指定的字符串从左至右进行置换宏名,字符串中的形参以相应的实参代替,字符串中的非形参字符保持不变。#defineS(a,b)a*barea=S(3,2)3*2机械地将实参代入宏定义的形参形式S(a,b)等同于a*bS(3,2)等同于3*2

10#definePI3.1415926#defineS(r)PI*r*rvoidmain(void){floata,area,b;a=3.6;b=4.0;area=S(a);printf(r=%f\narea=%f\n,a,area);}S(r)PI*r*rS(a)PI*a*aPI*a*a编译前机械替换,实参形参一一对应

11#definePI3.1415926#defineS(r)PI*r*rvoidmain(void){floata,area,b;a=1;b=2;area=S(a+b);printf(r=%f\narea=%f\n,a,area);}S(r)PI*r*rS(a+b)PI*a+b*a+b编译前机械替换,实参形参一一对应宏展开时实参不运算,不作语法检查#defineS(r)PI*(r)*(r)S(a+b)PI*(a+b)*(a+b)错误

12带参数宏定义一般形式:#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));

13#defineMAX(x,y)(x)(y)?(x):(y)…….main(){int

文档评论(0)

159****9610 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:6044052142000020

1亿VIP精品文档

相关文档