欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    C++程序设计第6章编译预处理.ppt

    • 资源ID:6153994       资源大小:209.99KB        全文页数:31页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    C++程序设计第6章编译预处理.ppt

    第6章 编译预处理,目的与要求6.1 文件包含处理6.2 宏定义6.3 条件编译本章小结,目的与要求,通过本章学习,应理解编译预处理的概念。理解“文件包含”的概念,掌握文件包含命令的使用方法。理解宏定义的概念,掌握不带参数的宏定义命令和带参数的宏定义命令的使用方法。理解条件编译的概念,初步掌握条件编译命令的使用方法。,编译预处理概念,1.编译预处理的概念“编译预处理”是指在对源程序进行通常的编译之前,根据编译预处理程序所提供的预处理命令对源程序作相应的处理。2.C+的编译预处理命令 C+的预处理命令主要有以下三种:(1)文件包含(2)宏定义(3)条件编译,6.1 文件包含处理,1.定义:将另一个头文件(.h)内容包含到本源文件中来称为文件包含处理。2.文件包含命令#include(1)命令格式:#include“文件名”或:#include(2)功能:将“文件名”所指文件内容读到当前文件中。作为当前文件的一个组成部分,即把文件的内容替代该#include命令行。,文件包含处理,【例6.1】输入两个整数a和b,输出其中较大的一个数。说明:(1)#include只能指定一个被包含文件。(2)文件包含是可以嵌套的。(3)在#include命令中,文件名可以用双引号或尖括号括起来。(4)文件包含命令可出现在程序中的任何位置。,例程,文件包含处理,文件包含的使用:(1)在程序文件要用到C+的库函数时,必须把含有该库函数的头文件包含到本文件中。(2)在设计一个大型程序时,可将程序公用的一些数据结构、输出格式定义成头文件,然后在相应的处理程序中,用文件包含命令将相应的头文件包含进来。【例6.2】求矩形的对角线的长、周长和面积。,例程,6.2 宏定义,定义:用指定标识符(宏名)来代表一个字符串称为宏定义。6.2.1 不带参数的宏定义 1.命令格式:#define 字符串 2.功能:用宏名代替字符串。3.宏展开:在编译预处理时将宏名替换成字符串的过程称为“宏展开”。【例6.3】求圆的周长、面积及圆球的体积。,例程,不带参数的宏定义,说明:(1)宏名一般习惯用大写字母表示,以便与变量名相区别;(2)使用宏名代替一个字符串,可以减少程序中重复书写某些字符串的工作量;(3)宏定义是用宏名代替一个字符串,仅作简单的替换;不作正确性检查;(4)宏定义不是C+语句,不必在行末加分号。如果加了分号,则会连同分号一起进行替换;(5)宏定义可出现在程序中的任何位置。通常,将宏定义放在源程序文件开始部分。宏名的作用域为从宏定义开始到本源程序文件结束。,不带参数的宏定义,(6)可以用#undef命令终止宏名的作用域,其一般格式为:#undef 标识符(7)在进行宏定义时,可以引用已定义的宏名,即宏名可以层层替换。(8)对程序中用双引号括起来的字符串内的字符,即使与宏名相同,也不进行替换。(9)在同一个作用域内,同一个宏名不能定义两次或两次以上;(10)宏定义与定义变量的含义不同,只作字符替换,不分配内存空间。【例6.4】求圆的周长、面积及圆球的体积。,例程,6.2.2 带参数的宏定义,1.命令格式:#define(参数表)字符串 2.功能:将带形参的字符串定义为一个带形参的宏名。3.宏调用:在编译预处理时将带实参的宏名用指定的字符串进行替换,并用实参替换形参,这被称为“宏调用”。【例6.5】求圆的周长、面积及圆球的体积。,例程,带参数的宏定义,说明:(1)带参数宏调用时,只是将语句中宏名后面括号内的实参代替#define命令行中的形参。当宏调用中包含的实参有可能是表达式时,在宏定义时要用括号把形参括起来,以避免错误。(2)在宏定义时,在宏名与带参数的括号之间不能有空格,否则将空格以后的全部字符都作为无参宏所定义的字符串。,带参数的宏与函数的区别,注意:带参数的宏和函数的区别:(1)两者的定义形式不一样。宏定义中只给出形式参数,而不要指明每一个形式参数的类型;而在函数定义时,必须指定每一个形式参数的类型;(2)函数调用是在程序运行时进行的,分配临时的内存单元;而宏调用则是在编译前进行的,并不分配内存单元,不进行值的传递处理。(3)函数调用时,先求实参表达式的值,然后将值代入形参;而宏调用时只是用实参简单地替换形参;(4)函数调用时,要求实参和形参的类型一致;而宏调用时不存在类型问题;(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;否则编译程序段2,或不编译。,条件编译,3.格式3(1)格式:#if 表达式 程序段1#else 程序段2#endif(2)功能:当指定的表达式的值为真(非零)时,编译程序段1;否则编译程序段2,或不编译。,条件编译,说明:(1)条件编译命令与宏定义一样,可以出现在程序中的任何地方;(2)当把表达式的值作为条件编译的条件时,在编译预处理时,必须能求出表达式的值,即该表达式中只能包含一些常量的运算。(3)条件编译命令不仅可用于调试程序,也可用于文件包含命令中。【例6.6】使用条件编译命令解决由于文件包含而出现的变量重名问题。,例程,本章小结,1.“文件包含”处理“文件包含”是指将一个头文件或源程序文件的内容包含到本文件中的操作。C+提供了#include命令用来实现“文件包含”处理。“文件包含”处理的一般格式为:#include 文件名 或:#include,2.宏定义,宏定义是用一个标识符(宏名)来代表一个字符串。有两种形式的宏定义,即不带参数的宏定义和带参数的宏定义。(1)不带参数的宏定义 不带参数的宏定义的一般格式为:#define 字符串(2)带参数的宏定义 带参数的宏定义的一般格式为:#define(参数表)字符串 注意:带参数的宏定义和函数的区别。,3.条件编译,“条件编译”就是对源程序的部分内容指定编译条件。有三种形式的条件编译命令。(1)格式1#ifdef 标识符 程序段1#else 程序段2#endif,条件编译,(2)格式2#ifndef 标识符 程序段1#else 程序段2#endif(3)格式3#if 表达式 程序段1#else 程序段2#endif,例6.1(1),文件filemax.h的内容为:int max(int x,int y)int z;if(x=y)z=x;else z=y;return(z);,文件filemain.cpp的内容为:#include#include filemax.hvoid main(void)int a,b,m;coutab;m=max(a,b);coutmax=mendl;,例6.1(2),#include=y)z=x;else z=y;return(z);,void main(void)int a,b,m;coutab;m=max(a,b);coutmax=cendl;,预编译预处理后,文件filemain.cpp变为如下形式:,返回,例6.2,#include#include void main(void)float a,b,p,l,s;coutab;p=sqrt(a*a+b*b);l=2*(a+b);s=a*b;cout长方形对角线=pendl;cout长方形周长=lendl;cout长方形面积=sendl;,程序执行后提示:输入长方形的边长:3 4 长方形对角线=5 长方形周长=14 长方形面积=12,返回,例6.3,#include#define PI 3.14159void main(void)float r,l,s,v;coutr;l=2.0*PI*r;s=PI*r*r;v=4.0/3.0*PI*r*r*r;cout Perimeter=lendl;coutArea=sendl;coutVolume=vendl;,程序执行后提示:Input radious:10 Perimeter=62.8318 Area=314.159 Volume=4188.79,返回,例6.4,#include#define PI 3.14159#define R 10.0#define L 2*PI*R#define S PI*R*R#define V 4.0/3.0*PI*R*R*Rvoid main(void)coutL=Lendl;coutS=Sendl;coutV=Vendl;,程序执行后输出:L=62.8318 S=314.159 V=4188.79,返回,例6.5,#include#define PI 3.14159#define L(r)2.0*PI*r#define S(r)PI*r*r#define V(r)4.0/3.0*PI*r*r*rvoid main(void)float radius,length,area,volume;coutradius;length=L(radius);area=S(radius);volume=V(radius);,coutL=lengthendl;coutS=areaendl;coutV=volumeendl;,返回,例6.6(1),源文件exemple6_6.cpp的内容为:#include#include exemple6_6.h#define PI 3.14159#define R 6#define AREA R*R*PIfloat volume;void main(void)volume=4*PI*R*R*R/3;cout圆的面积=AREAendl;cout圆球体积=volumeendl;,头文件exemple6_6.h内容为:#define R 6 float volume;,例6.6(2),预编译后的源文件为:#include#define R 6float volume;#define PI 3.14159#define R 6#define AREA R*R*PIfloat volume;void main(void)volume=4*PI*R*R*R/3;cout圆的面积=AREAendl;cout圆球体积=volumeendl;,编译出错,例6.6(3),采用条件编译命令后的头文件exemple6_6.h修改如下:#ifndef _EX_ H#define _EX_ H#define R 6 float volume;#endif,例6.6(4),采用条件编译命令后的源文件exemple6_6.cpp修改如下:#include#include“exemple6_6.h”#ifndef _EX_ H#define _EX_ H#define R 6 float volume;#endif#define PI 3.14159#define AREA R*R*PIvoid main(void)volume=4*PI*R*R*R/3;cout圆的面积=AREAendl;cout圆球体积=volumeendl;,例6.6(5),程序执行后输出:圆的面积=113.097 圆球体积=904.778,返回,

    注意事项

    本文(C++程序设计第6章编译预处理.ppt)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开