C语言程序设计 作者 解晨光 葛竹春 第9章.pptVIP

C语言程序设计 作者 解晨光 葛竹春 第9章.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第9章 编译预处理 教学目标 ? 理解编译预处理功能; ? 了解宏定义机制。 C语言中的编译预处理功能是其独有的,编译预处理就是在C程序中对使用的几种特殊命令(宏定义、文件包含和条件编译命令)在编译前进预处理的过程。 C语言提供的预处理功能主要有以下3种: (1)宏定义; (2)文件包含; (3)条件编译。 分别用宏定义命令、条件包含命令和条件编译命令来实现。 9.1 宏 定 义 宏:在C语言源程序中允许用一个标识符来表示一个字符串。 例如3.14159这个数,就可以用如下的宏定义把它定义成一个符号PI: # define PI 3.1415926 所有名为PI的标识符用3.1415926来替换。这个替换过程称为“宏替换”或“宏展开”。 9.1.1 不带参数的宏定义 无参宏就是宏名后不带任何参数。 格式:#define 标识符 字符串 功能:“标识符”为用户定义标识符,称为宏名,也叫符号常量,一般用大写字母表示。在编译预处理时,将程序中出现的宏名替换成“字符串”的内容,这一过程称为宏展开。 宏定义在使用中应注意以下几点。 (1)宏名的前后应有空格,以便准确地辨认宏名,如果没有留空格,则程序运行结果会出错。 (2)宏定义是用宏名来表示一个字符串,在宏展开时又以该字符串取代宏名,这只是一种简单的代换,字符串中可以含任何字符,可以是常数,也可以是表达式,预处理程序对它不做任何检查。如有错误,只能在编译源程序时发现。 (3)宏定义命令不是语句,所以其后不要跟分号。 (4)字符串(或数值)中如果出现运算符号,则要注意替换后的结果,通常可以在合适的位置加上括号。 (5)宏定义必须写在函数之外,其作用域为从宏定义命令起到源程序结束。 (6)宏定义一般放在主程序文件的开头,函数的外面,或者放在一个include 文件中,宏定义只在这一源文件中有效,出了这个文件,宏定义便失去了作用。 (7)C语言规定,宏名如果出现在字符串常量中或者用双引号括起来的字符串内时,将不作为宏名处理,不对其进行宏替。 (8)程序中遇到# undef 标识符以后,宏定义失效。 (9)一个宏定义的字符串可以引用已经定义过的宏名。 9.1.2 带参数的宏定义 1.定义带参数的宏 在宏定义#define中,宏名还可以带形式参数,在使用时用实参去替换形参。 格式:#define宏名(形式参数表)字符串 功能:预编译时遇到带实参的宏名,则按命令行中指定的字符串从左到右进行置换。原则是:遇形参则以实参代替,非形参字符原样保留,从而形成展开后的内容。 说明:定义中的“字符串”应包含括号中所指定的形式参数。注意宏名与括号之间不要加空格,否则就成为不带参数的宏定义了。 说明: (1)对宏定义字符串中的参数都要用括号码括起来,以免发生运算错误。 (2)带参数的宏定义也可以由函数来实现,由于程序中每使用一次宏都要进行一次替代操作,所以,如果在程序中多次使用宏,程序的目标代码可能比使用函数要长一些。另外,在宏调用中对参数没有类型的要求。一般用宏来表示一些简单的表达式。 (3)带宏参定义中,宏名和形参表之间不能有空格出现。 (4)在宏定义中的形参是标识符,而宏调用中的实参可以是表达式。 (5)宏替换可以嵌套,即可以一个宏套用另一个或多个已定义的宏。 (6)带参数的宏替换可以由多条C语句组成。 2.使用带参数的宏的好处 (1)使程序更加简洁,减少不必要的重复书写。 (2)增强程序的可读性,一般用一个含义明确的宏名代替一个较复杂的运算式,会使一目了然。 3.带参数的宏与函数的区别 (1)函数调用时,要保留现场和返回点,而后把控制转移给被调用函数。当被调用函数执行结束后,又要恢复现场和把控制返回到调用函数;而对带参数宏的使用不存在控制的来回转移,它只是表达式的运算。 (2)函数有一定的数据类型,且数据类型是不变的;而带参数的宏一般是一个运算表达式,它没有固定的数据类型,其数据类型就是表达式运算结果的数据类型。 (3)函数定义和调用中使用的形参和实参都受数据类型的限制;而带参数宏的形参和实参可以是任意数据类型。 (4)函数调用中存在参数的传递过程;而带参数宏的引用不存在参数传递过程。 (5)使用函数可缩短程序占用的内存空间,程序的执行效率降低;而带参数的宏其执行效率要比函数高。 【例9-2】输入两个数,取其中最大值。 #include<

文档评论(0)

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

1亿VIP精品文档

相关文档