第6篇 编译预处理.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文档。上传文档
查看更多
宏 宏(macro)是程序设计语言中使用较为广泛的一个概念,简单来说,宏是一种以相同的源语言执行预定义指令序列的指令。在C++中,通过宏的使用,可以将一个表达式定义成宏,并在C++的源程序中随意调用。 在编译预处理时,对程序中所有出现的宏名,都用宏定义中的字符串去代换,这称为宏代换或宏展开。 宏定义 宏定义是由源程序中的宏定义命令完成的,宏代换是由预处理程序自动完成的。在C++中,宏分为有参数和无参数两种。 不带参数的宏也称为无参宏,其宏名后不带参数,定义的一般形式为: #define 标识符 字符串 带参数的宏定义的一般形式为: #define 宏名(形参表) 字符串 条件编译 预处理程序除了提供上面介绍的宏定义和文件包含功能,其还提供了条件编译的功能。条件编译可以按不同的条件去编译不同的程序部分,因而产生不同的目标代码文件。这对于程序的移植和调试是很有用的。 #ifdef形式:如果标识符已被#define命令定义过,对程序段1进行编译,否则对程序段2进行编译。 #ifndef形式 :如果标识符未被#define命令定义过,则对程序段1进行编译,否则对程序段2进行编译。 #if形式 :如常量表达式的值为真(非0),则对程序段1进行编译,否则对程序段2进行编译。 其他命令 #error命令 :C++中,预处理程序中的#error指令用于程序的调试,在编译中遇到#error指令就停止编译。 #line命令 :#line命令用于控制行号,其一般在发布错误和警告信息时使用。当用户在编译一段程序的时候,如果有错误发生,编译器会在错误前面显示出错文件的名称及文件中的第几行发生错误。指令#line可以实现这个功能,也就是说,当出错时显示文件中的行数及希望显示的文件名。 本章主要介绍了C++中编译预处理的基本内容。结合C++中使用较多的地方,本章对宏及其相关应用做了详细讲解,依次介绍了宏的定义、调用、无参宏和带参宏的定义调用,以及宏与函数的区别等,对于难点部分,都安排了具体示例方便读者理解。此外,本章还对包含文件处理#include命令、条件编译相关命令等做了简要的介绍。学习完本章,读者应对编译器编译C++源程序的过程有一定理解,并了解如何优化程序的部分方法。 习题 4.下面程序段定义了两个宏,在主函数main()中使用了条件编译语句来控制程序的运行,读者仔细理解并写出输出结果。 #includeiostream.h #define CIR(r) r*r //带参数的宏定义 #define TEST //定义宏 void main() { int x=1; //定义并初始化变量 int y=2; int z; z=CIR(x+y); //调用宏 coutCIR(x+y)= zendl; //输出宏调用的结果 #ifdef TEST //条件编译语句 coutx= x\ty= yendl; //输出结果 #endif //结束条件编译 coutz= zendl; //输出结果 } 1-* 融智技术学院 融智技术学院 第6章 编译预处理 杨章伟 e-mail:yang505412@163.com 课程内容安排 预处理命令 宏 文件包含 条件编译 其他命令 小结 习题 预处理命令 简单来说,预处理就是对源文件进行编译前,先对预处理部分进行处理,然后对处理后的代码进行编译。这样做的好处是,经过处理后的代码,将会变得很精短。为让用户更好地使用预处理,C++提供了丰富的预处理命令,主要包括如下几种:#define、/#error、#if、#else、#elif、#endif、#ifdef、#ifndef、#undef、#line和#pragma。 由上述命令读者可以看出,每个预处理指令均带有符号“#”。简单来说,上面的这些预处理命令可以划分为文件包含、条件编译、布局控制和宏替换4个大类 。 取消宏 由于宏定义的作用域是整个源程序,在一些应用中不需要其覆盖整个程序,因此就需要终止其作用域,C++中终止其作用域的命令为# undef。如果要求宏定义只在一个函数中起作用,就可以在函数定义之前定义宏,在函数结束后结束宏。 宏嵌套 在宏定义中,读者还需要注意的是,宏定义允许嵌套,即在宏定义的字符串中可以使用已经定义的宏名,在宏展开时由预处理程序层层代换。 内联函数 内联函数也称为内嵌函数,当在一个函数的定义或声明前加上关键字inline则就把该函数定义为内联函数,它主要用于解决程序的运行效率。 计算机在执行一般函数的调用时,无论该函

文档评论(0)

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

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

1亿VIP精品文档

相关文档