C++程序设计第6章编译预处理.ppt
《C++程序设计第6章编译预处理.ppt》由会员分享,可在线阅读,更多相关《C++程序设计第6章编译预处理.ppt(31页珍藏版)》请在三一办公上搜索。
1、第6章 编译预处理,目的与要求6.1 文件包含处理6.2 宏定义6.3 条件编译本章小结,目的与要求,通过本章学习,应理解编译预处理的概念。理解“文件包含”的概念,掌握文件包含命令的使用方法。理解宏定义的概念,掌握不带参数的宏定义命令和带参数的宏定义命令的使用方法。理解条件编译的概念,初步掌握条件编译命令的使用方法。,编译预处理概念,1.编译预处理的概念“编译预处理”是指在对源程序进行通常的编译之前,根据编译预处理程序所提供的预处理命令对源程序作相应的处理。2.C+的编译预处理命令 C+的预处理命令主要有以下三种:(1)文件包含(2)宏定义(3)条件编译,6.1 文件包含处理,1.定义:将另一
2、个头文件(.h)内容包含到本源文件中来称为文件包含处理。2.文件包含命令#include(1)命令格式:#include“文件名”或:#include(2)功能:将“文件名”所指文件内容读到当前文件中。作为当前文件的一个组成部分,即把文件的内容替代该#include命令行。,文件包含处理,【例6.1】输入两个整数a和b,输出其中较大的一个数。说明:(1)#include只能指定一个被包含文件。(2)文件包含是可以嵌套的。(3)在#include命令中,文件名可以用双引号或尖括号括起来。(4)文件包含命令可出现在程序中的任何位置。,例程,文件包含处理,文件包含的使用:(1)在程序文件要用到C+的
3、库函数时,必须把含有该库函数的头文件包含到本文件中。(2)在设计一个大型程序时,可将程序公用的一些数据结构、输出格式定义成头文件,然后在相应的处理程序中,用文件包含命令将相应的头文件包含进来。【例6.2】求矩形的对角线的长、周长和面积。,例程,6.2 宏定义,定义:用指定标识符(宏名)来代表一个字符串称为宏定义。6.2.1 不带参数的宏定义 1.命令格式:#define 字符串 2.功能:用宏名代替字符串。3.宏展开:在编译预处理时将宏名替换成字符串的过程称为“宏展开”。【例6.3】求圆的周长、面积及圆球的体积。,例程,不带参数的宏定义,说明:(1)宏名一般习惯用大写字母表示,以便与变量名相区
4、别;(2)使用宏名代替一个字符串,可以减少程序中重复书写某些字符串的工作量;(3)宏定义是用宏名代替一个字符串,仅作简单的替换;不作正确性检查;(4)宏定义不是C+语句,不必在行末加分号。如果加了分号,则会连同分号一起进行替换;(5)宏定义可出现在程序中的任何位置。通常,将宏定义放在源程序文件开始部分。宏名的作用域为从宏定义开始到本源程序文件结束。,不带参数的宏定义,(6)可以用#undef命令终止宏名的作用域,其一般格式为:#undef 标识符(7)在进行宏定义时,可以引用已定义的宏名,即宏名可以层层替换。(8)对程序中用双引号括起来的字符串内的字符,即使与宏名相同,也不进行替换。(9)在同
5、一个作用域内,同一个宏名不能定义两次或两次以上;(10)宏定义与定义变量的含义不同,只作字符替换,不分配内存空间。【例6.4】求圆的周长、面积及圆球的体积。,例程,6.2.2 带参数的宏定义,1.命令格式:#define(参数表)字符串 2.功能:将带形参的字符串定义为一个带形参的宏名。3.宏调用:在编译预处理时将带实参的宏名用指定的字符串进行替换,并用实参替换形参,这被称为“宏调用”。【例6.5】求圆的周长、面积及圆球的体积。,例程,带参数的宏定义,说明:(1)带参数宏调用时,只是将语句中宏名后面括号内的实参代替#define命令行中的形参。当宏调用中包含的实参有可能是表达式时,在宏定义时要
6、用括号把形参括起来,以避免错误。(2)在宏定义时,在宏名与带参数的括号之间不能有空格,否则将空格以后的全部字符都作为无参宏所定义的字符串。,带参数的宏与函数的区别,注意:带参数的宏和函数的区别:(1)两者的定义形式不一样。宏定义中只给出形式参数,而不要指明每一个形式参数的类型;而在函数定义时,必须指定每一个形式参数的类型;(2)函数调用是在程序运行时进行的,分配临时的内存单元;而宏调用则是在编译前进行的,并不分配内存单元,不进行值的传递处理。(3)函数调用时,先求实参表达式的值,然后将值代入形参;而宏调用时只是用实参简单地替换形参;(4)函数调用时,要求实参和形参的类型一致;而宏调用时不存在类
7、型问题;(5)使用宏次数多时,宏展开后源程序变长,因为每一次宏展开都使源程序增长;而函数调用不使源程序变长。,6.3 条件编译,定义:对源程序的一部分内容指定编译条件称为条件编译。条件编译命令有三种格式。1.格式1(1)格式:#ifdef 标识符 程序段1#else 程序段2#endif(2)功能:当所指定的标识符已经被#define命令定义过,则在程序编译阶段只编译程序段1;否则编译程序段2,或不编译。,条件编译,2.格式2(1)格式:#ifndef 标识符 程序段1#else 程序段2#endif(2)功能:当所指定的标识符没有被#define命令定义过,则在程序编译阶段只编译程序段1;否
8、则编译程序段2,或不编译。,条件编译,3.格式3(1)格式:#if 表达式 程序段1#else 程序段2#endif(2)功能:当指定的表达式的值为真(非零)时,编译程序段1;否则编译程序段2,或不编译。,条件编译,说明:(1)条件编译命令与宏定义一样,可以出现在程序中的任何地方;(2)当把表达式的值作为条件编译的条件时,在编译预处理时,必须能求出表达式的值,即该表达式中只能包含一些常量的运算。(3)条件编译命令不仅可用于调试程序,也可用于文件包含命令中。【例6.6】使用条件编译命令解决由于文件包含而出现的变量重名问题。,例程,本章小结,1.“文件包含”处理“文件包含”是指将一个头文件或源程序
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 程序设计 编译 预处理
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-6153994.html