书签 分享 收藏 举报 版权申诉 / 22
上传文档赚钱

类型《C语言程序设计》课件第八章11.ppt

  • 上传人(卖家):momomo
  • 文档编号:4850738
  • 上传时间:2023-01-18
  • 格式:PPT
  • 页数:22
  • 大小:218.50KB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《《C语言程序设计》课件第八章11.ppt》由用户(momomo)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    C语言程序设计 语言程序设计 课件 第八 11
    资源描述:

    1、宏定义宏定义 文件包含文件包含 条件编译条件编译 基本内容:基本内容:宏定义宏定义:是用一个指定的名字来代表一个常量是用一个指定的名字来代表一个常量表达式或字符串,其复杂形式是带参数的表达式或字符串,其复杂形式是带参数的宏。宏。(1)(1)程序中常用到一些特别的量,如用程序中常用到一些特别的量,如用0 0或或1 1作条件判别作条件判别 量,用量,用-1-1表示文件结束,用表示文件结束,用21474836472147483647表示最大表示最大4 4 字节整数字节整数2 23131-1-1等,它们都常定义成宏名。如:等,它们都常定义成宏名。如:#define NO 0#define NO 0#d

    2、efine YES 1#define YES 1#define EOF(-1)#define EOF(-1)(2)(2)宏名可定义为具有一定精度要求的宏名可定义为具有一定精度要求的floatfloat和和doubledouble类类 型值。如:型值。如:#define PI 3.14159#define PI 3.14159#define EPS 1.0e-9#define EPS 1.0e-9(3)宏名还可以定义为数组中最后一个元素的地址&aMAX-1。如:#define MAX 100#define MAXP&aMAX-1(4)利用宏定义还可以把C语言语句的书写格式写成程 序员习惯的格式。

    3、如:预处理后:#define then end#define begin else if(ab)#define end;begin a:=b;#define:=c:=b;d:=(a+b)/2;.D:=(d*c)/2;if(ab)then end else begin c:=b;a:=b;d:=(a+b)/2;d:=(a+b)/2;利用宏定义将C写成PASCAL的格式(1)宏名习惯上用大写字母表示,表示与一般变量名相 区别。但这并非C语言的规定,也可以用小写字母。(2)宏定义不是C语句,不必在行末尾加分号。若加,则会连分号一些进行置换,可能会出现语法错误。(3)字符串或字符常量中若有与宏名重名的

    4、,预处理程 序一律不将它们作为宏名对待,更不进行代换。例如:#define YES 1 printf(“YESn”);输出的是YES,而不是1。(4)在宏定义中,可以引用已经定义的宏名,可以进 行层层代换。例如:#define PI 3.14159#define R 3.0#define L 2*PI*R#define S PI*R*R(5)宏定义的有效范围为定义点到该源文件结束,还可 以用#undef命令终止宏定义的作用域。例如:#define P 100 main()#undef P f1()l 所谓带参数的宏定义是指宏名后带有形参表的宏定义。格式:#define 宏名(形参表)表达式 说

    5、明:宏定义中的形参在以后的程序中将以实参替换。置换过程:在程序中若有带参数的宏,则按#define命令行中指定的字符串从左到右进行置换。如果串中包含宏中的形式参数,则将程序语句中相应的实参(可以是常量、变量或表达式)代替形参,如果宏定义中的字符串中的字符不是参数字符,则原样保留。(1)带参数的宏定义常用来代替一些简短的表达式。例如:#define MIN(x,y)(xy)?x:y)(2)带参数的宏定义也可以直接引用已定义过的宏定 义,即实现宏定义的嵌套。例如:#define SQ(x)(x*x)#define FIFTH(x)CUBE(x)*(SQ(x)预处理程序对每个宏名展开代换,直到件中不

    6、再有宏名为止。(3)带参数的宏定义可以简化格式打印函数printf的格 式,提高程序的可读性。例如:#define NL putchar(n)#define PR(for,val)printf(val=%fort,val)#define PRINT1(f,x)PR(f,x);NL PRINT1(d,a+b)其宏展开为:PR(d,a+b);NL 又进一步展开为:printf(a+b=%dt,a+b);putchar(n)(1)在宏展开后容易引起误解的表达式,在宏定义时,应将表达式用圆括号括起来。例如:#define S(a,b)a+b 若调用 v=S(2,3)*4;时,经宏展开后为:v=2+3*

    7、4;所以,原想先计算2+3,则变成先计算3*4了,故应将宏定义中的表达式用圆括号括起来,即成为:#define S(a,b)(a+b)由此可见,除非有理由不要圆括号,否则,一般都应将宏定义中的表达式用圆括号括起来。在使用带参数的宏定义时,要注意的问题:#define MIN(x,y)(x)k=10*x(b)?(a):(b),(a)(b)?(b):(a)l(1)函数调用时是先计算实参表达式的值,然后l 将它代入形参。而使用带参数的宏时只是进 l 行简单的字符代换。l(2)函数调用是在程序运行中处理的,临时给它l 分配存储单元。而宏展开是在编译时进行的,l 并不给它分配存储单元,不进行值的传递,l

    8、 也没有“返回值”。l(3)函数的实参、形参都要求定义类型,且二者类型l 必须一致,当不一致时,还要进行类型转换。而l 对宏不存在着类型问题,宏名无类型、参数无类l 型,都只是一种符号代表,宏展开时只是进行对l 应字符的代换。l(4)宏展开会使源程序增长。由于宏展开是在编译时l 进行的,故只占编译时间,不占运行时间。而函l 数调用不会使源程序变长。函数调用占运行时间l (分配单元,保存现场,值传递,返回等)。所l 以,带参数的宏定义可以省去在程序中重复写相l 同的程序段,同时,在程序中 带参数的宏与函l 数调用不同,它不必为保存现场入栈、出栈,运l 行速度比函数调用快。文件包含:是指一个程序文

    9、件将另一个指定文 件的全部内容包含进来。格式:#include 被包含文件名 或#include“被包含文件名”说明:其中被包含文件名是一个已经存在于系 统中的文件的名字。被包含的文件称为“标题文件”或“头部文 件”,常以“.h”为后缀。注:文件包含预处理行可以使用一对尖括号或使用一对双引号“”将头部文件名括起来。尖括号:当用一对尖括号将头部文件名括起 来时,其意义是指示编译系统按系 统设定的标准目录搜索头部文件。双引号:当用一对双引号将头部文件名括起来 时,其意义是指示编译系统先在源文 件所在的目录中搜索,若找不到时,则再按系统设定的标准搜索。(1)文件包含预处理行#include通常放在C

    10、程序的开头,其被包 含的文件内容常是一些公用的宏定义或外部变量的说明(注意,是用extern标识符的说明,不是外部变量的定义),当其出错,或因某种原因需要修改其内容时,只需修改相应的头部文件 内容,而不必修改使用它的程序文件,便于程序的更新维护。(2)可以节省程序设计人员的重复劳动。当程序员在工作中积累 了许多有价值的宏定义,或者编写了一些通用、常用的子程 序后,可将其组成若干文件,在编写新程序时,可用文件包 含将其嵌进来,而不必重复地写这些宏定义或子程序。这就 好像使用企业标准件一样拿来就用,避免了重复性劳动,也 减少了因书写不专心导致出错的可能性。l 一个#include命令只能指定一个被

    11、包l 含的头部文件,若要包含多个,则应 l 该使用相应多个#include命令。l 文件包含可以嵌套,即被包含文件中l 还可以再包含另外的被包含文件。l 头部文件只能是ASCII 代码文件,而l 不能是目标代码文件。l 要调用标准数字库函数时,必须在文l 件开头用文件包含命令行。条件编译:条件编译:在编译C的源文件前,根据给定的条件 决定编译的范围即所谓条件编译。说明:一般情况下,源程序中所有的行都参加编译。但有时希望对其中的一部分内容只在满足一 定条件下才进行编译,即对一部分内容指定 编译条件,当条件满足时,对一组语句进行 编译,而当条件不满足时,则对另一组语句 进行编译。这就是所谓的“条件编译”。1.条件编译命令格式一 格式:#ifdef 标识符 程序段1#else 程序段2#endif 功能:若标识符已经被定义过,则对程序段1进行 编译,否则,对程序段2进行编译。2.条件编译命令格式二格式:#ifndef 标识符 程序段1#else 程序段2#endif 说明:这种格式的条件编译功能与第一种格式的刚好相反,即:如果标识符未被定义过,则程序段1参加编译,否则程序段2参加编译。3.条件编译命令格式三 格式:#if 程序段1#else 程序段2#endif 功能:若指定表达式的值为真(非零),则程序 段1参加编译,否则程序段2参加编译。

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:《C语言程序设计》课件第八章11.ppt
    链接地址:https://www.163wenku.com/p-4850738.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库