C_C++程序设计与上机指导005.pptVIP

  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文档。上传文档
查看更多
C_C程序设计与上机指导005

第5章 编译预处理 5.1 宏定义 5.1.1 符号常量 5.1.2 带参宏定义 5.1.3 终止宏定义 5.1.4 书写#define语句注意事项 5.1.1 符号常量 用一个指定的标识符来代表一个字符串。 一般形式: #define 标识符 字符串 其中: #:表示这是一条预处理命令。凡是以“#”开头的均为预处理命令。“define”为宏定义 命令。 标识符:为所定义的宏名。 字符串:可以是常数、表达式、格式串等。 如:#define PI 3.1415926 以上这种形式也称为不带参数的宏定义。此外,还常对程序中反复使用的表达式进行宏定义。 5.1.2 带参宏定义 C语言允许宏带有参数,这时不单要进行字符串替换,还要进行参数替换。在宏定义中的参数称为形式参数,在宏调用中的参数称为实际参数。对带参数的宏,在调用中,不仅要宏展开,而且要用实参去代换形参,非形参字符保持不变。 带参宏定义一般形式: #define 宏名(形参表) 字符串 其中:字符串中含有各个形参。 带参宏调用一般形式: 宏名(实参表); 如: #define S(a,b) a*b /*带参宏定义*/ area=S(3,2); /*带参宏调用*/ 5.1.3 终止宏定义 宏定义必须写在函数之外,其作用域为宏定义命令起到源程序结束。如要终止其作用域可使用#undef命令提前终止宏定义的作用域。 5.1.4 书写#define语句注意事项 (1)习惯上宏名用大写字母表示,以便于与变量区别。但也允许用小写字母。 (2)宏定义不是说明或语句,在行末不必加分号,如加上分号则连分号也一起置换。 (3)同一个宏名不能重复定义,除非两个宏定义命令行完全一致。 (4)#define命令行还可以不包含“字符串”,这种情况下仅说明标识符“被定义”。 (5) 宏定义中的“字符串”不能替换双引号中与宏名相同的字符串。 (6)带参的宏调用中,实参不能替换在双引号中的形参。 (7)宏定义中的“字符串”不能替换用户标识符中的成分。 (8)宏定义允许嵌套,在宏定义的字符串中可以使用已经定义的宏名。在宏展开时由预处理程序层层代换。 (9)宏替换与函数调用的区别: ①宏替换是在编译时由预处理程序完成的,因此宏调用不占运行的时间,但每引用一次,都会使目标程序增大一次。而函数调用是在程序运行时进行的,在函数调用过程中需要占用一系列的处理时间(现场保护和恢复等),但无论调用多少次,都不会增加目标程序的长度。 ②在有参宏中,形参无类型,而在有参函数中,形参是有类型的,故要求实参的类型与其一致。 ③调用有参宏时,只是将实参简单地替换为形参,而函数调用是将实参的值传递给形参。 (10) 宏定义是用宏名来表示一个字符串,在宏展开时又以该字符串取代宏名,这只是一种简单的代换,字符串中可以包含任何字符,可以是常数,也可以是表达式,预处理程序对它不作任何检查。如有错误,只能在编译已被宏展开后的源程序时发现。 5.2 文件包含 文件包含是指在一个文件中包含另一个文件的全部内容。它是C语言中预处理程序的另一个重要功能。我们可以把一些宏定义按照功能分别存入不同的文件中,当我们在开发程序时要使用某类宏定义时,就无需在程序中重新定义,而只要把这些宏定义所在的文件,包含在程序的开头即可。 一般形式:#include文件名    或:#include文件名 文件包含命令的功能:把指定的文件插入该命令行位置取代该命令行, 从而把指定的文件和当前的源程序文件连成一个源文件。 这两种形式是有区别的:使用尖括号表示直接到系统指定的包含文件目录去查找,而不在源文件目录去查找;使用双引号时,则表示系统首先在当前的源文件目录中查找,若未找到,再到系统指定的包含文件目录去查找,故使用双引号比较保险。当然,用户编程时可根据自己文件所在的目录来选择某一种命令形式。 5.3 条件编译 预处理程序提供了条件编译的功能。 可以按不同的条件去编译不同的程序部分,即在当满足某条件时对一组语句进行编译,而对条件不满足时则编译另一组语句,因而产生不同的目标代码文件。 虽然有的程序利用条件语句或条件编译均可进行,但是两者是有区别的:利用条件语句会使目标程序增长,因为所有的语句都要参与编译,运行时间也增长;而采用条件编译,则可以减少被编译的语句,从而缩短目标程序的长度,减少运行时间。当条件编译段比较多时,目标程序可以大大减少,这在编写大型程序时作用就显得非常突出,同时也增强了程序的可移植性和灵活性。 条件编译有三种形式,下面分别介绍: 第一种形式 第二种形式 第三种形式 第一种形式 第二种形式 第三种形式 5.4 典型程序举例 Company Logo 5.1 宏 定 义

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

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

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档