- 1、本文档共20页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
*计算机科学学院*计算机科学学院*计算机科学学院*计算机科学学院*计算机科学学院*计算机科学学院*计算机科学学院*计算机科学学院*计算机科学学院*计算机科学学院*计算机科学学院*计算机科学学院第8章编译预处理8.1宏定义8.2文件包含8.3条件编译教学目的和基本要求:教学重点:C语言提供的三种主要的预处理命令(宏定义命令、文件包含命令和条件编译命令的使用)。要求学生了解预处理的概念,掌握宏定义命令,文件包含命令及条件编译命令。*“编译预处理”是C语言编译系统的一个组成部分。是在对程序编译前由编译系统中的预处理程序对源程序的预处理命令进行处理。源程序中的预处理命令均以“#”开头,结束不加分号,以区别源程序中的语句,它们可以出现在程序中的任何位置,但习惯上写在源程序的开头,作用域是自出现点到源程序的末尾。预处理命令包括宏定义(宏替换)、文件包含和条件编译。*8.1宏定义8.1.1无参宏定义1.一般形式为:#define标识符(宏名)字符串(宏体)其中:“#”表示一条预处理命令,“define”为宏定义命令;“标识符”为定义的宏名,通常用大写字母表示,以便于与变量区别;“字符串”即宏体可以是常数(例如:2.56,300)、表达式(例如:a*b,PI*R*R)、格式串(“\n”,“%d”)等。如:#definePI3.14159/*定义后,可以在程序中用PI来代替3.14159*/2.宏定义的作用在宏定义之后,该程序中的宏名就代表了宏体。*3.说明(1)宏定义不是C语句,不能在行尾加分号。(2)宏定义是用宏名代替宏体,只作简单的置换,在预处理时不作任何语法检查。如果有错误,只能在编译已被宏展开后的源程序时才会发现错误并报错。(3)宏定义命令必须写在程序中函数之外,其作用域为宏定义命令起到源程序结束。如要终止其作用域可使用#undef命令。例如:#undefF,终止F的作用域。通常,宏定义命令放在文件开头处。(4)程序中对用双引号括起来的字符串内的字符,即使与宏名同名,也不进行宏展开。*(5)在进行宏定义时,可以引用已定义的宏名。宏定义的嵌套使用:#defineR3.0#definePI3.1415926#defineL2*PI*R/*宏体是复杂表达式*/#defineSPI*R*R例如:voidmain(){printf(“L=%f,S=%f\n”,L,S);/*2*PI*R替换L,PI*R*R替换S,3.1415926替换PI,3.0替换R*/}程序运行结果如下:L=18.849556,S=28.274333(6)宏定义与定义变量的含义不同,只作字符替换,不分配内存空间。*2.带实参宏名的展开宏名被所定义的宏体替换,宏体中的形参按从左到右的顺序被实参替换。例如:c=S(1,2)+S(3,4);/*1,2,3,4为实参*/展开为:c=1*2+3*4;/*用实参1,2和3,4分别顺序替换形参a,b*/1.带参宏定义的一般形式#define宏名(形参表)宏体/*在宏体中含有形参*/带参宏调用的一般形式宏名(实参表)例如:#defineS(a,b)a*bc=S(2,3);8.1.2带参数的宏定义形参实参*3.说明(1)带参宏定义中,宏名和形参表的左括号之间不能有空格出现,否则将空格以后的字符都作为宏体的一部分。(2)在带参宏定义中,宏体内的形参通常要用括号括起来以避免出错。例如:#defineS(r)PI*(r)*(r)area=S(a+b);宏展开为:area=PI*(a+b)*(a+b),若r两侧无括号,则为:area=PI*a+b*a+b,显然出错。(3)虽然
文档评论(0)