c语言课件第八章.ppt

上传人:牧羊曲112 文档编号:6504357 上传时间:2023-11-07 格式:PPT 页数:21 大小:312.99KB
返回 下载 相关 举报
c语言课件第八章.ppt_第1页
第1页 / 共21页
c语言课件第八章.ppt_第2页
第2页 / 共21页
c语言课件第八章.ppt_第3页
第3页 / 共21页
c语言课件第八章.ppt_第4页
第4页 / 共21页
c语言课件第八章.ppt_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《c语言课件第八章.ppt》由会员分享,可在线阅读,更多相关《c语言课件第八章.ppt(21页珍藏版)》请在三一办公上搜索。

1、第八章,C语言程序设计,编 译 预 处 理,本章主要内容1.掌握无参宏定义和带参宏定义的方法2.掌握文件包含命令的形式和文件包含的实现过程3.了解条件编译命令,C的源程序 预处理 编译 目标程序(*.C)_(*.OBJ),编译系统中有:预处理程序 编译程序,宏替换#define N 20 文件包含#include条件编译 if(.),C中的预处理命令分类,宏定义有两种类型:字符串替换和带参数的宏替换,1 字符串宏替换,功能:在预处理时,将程序中宏定义之后出现的所有的宏名,用宏替换体代替。,宏替换名,宏替换体,例如:#define PI 3.14159,格式:#define 标识符字符串,C的编

2、译程序调用预处理程序检查有否宏名,若有,用宏替换体将其替换,完成之后,将替换后的源程序交该编译程序。,8.1 宏定义,用途:常用的符号常数,PI=3.14159 自然对数的底:2.71828 数组的长度,#define N 10/*编译之前用10替换所有的N*/.int aN,说明:,通常放在程序开头,不加分号,是代替,不是赋值(不作语法检查),可将多个语句或表达式定义为一个宏替换,区别变量和关键字,习惯用大写,#define R 3.0#define PI 3.145926#define L 2.0*PI*R#define S PI*R*R,双引号中的不替换,有效范围,从定义开始到程序结尾,

3、例:#define PI 3.14159main()printf(“PI=%fn”,PI);,结果:PI=3.14159,main()printf(“PI=%sn”,”PI”);,可以嵌套,后定义的宏可以包含先定义的宏名,结果:PI=PI,2 带参数的宏定义,带参数的宏不仅能进行字符串代替,而且还进行参数代换。,格式:#define 宏名(参数表)表达式,功能:,带参数的宏将一个带形参的表达式定义为一个带参数的宏名,预处理程序对程序中所有带实参表的宏名进行宏展开替换,用表达式代替宏名,用参数表中的实参代替表达式中对应的形参。,例:#define S(a,b)a*b,程序中 S(3,2),3*2

4、,用途:,用带参数的宏可以代表一些简短的表达式,提高程序执行的效率。,*宏定义可以嵌套,*对常用的格式输入输出函数printf可以进行宏定义,使程序简化,*宏名与参数的圆括号之间不能有空格 s(a,b),说明:,*宏定义命令要求在一行内写完,如换行,用“”表示下一行继续。,*对于宏定义的形参要根据需要加上圆括号,以免 发生运算错误,例1 使用有参宏替换求园的面积。#define PI 3.1415926#define S(r)PI*r*r main()float a=3.6,area;area=S(a);printf(“r=%fnarea=%fn”,a,area);,例2 求下列语句的循环次数

5、。#include“stdio.h”#define N 2#define M N+1#define NUM(M+1)*M/2 main()int i,n=0;for(i=1;i=NUM;i+)n+;printf(“%d”,n);,8,函数要求形参,实参有类型(相同)宏的形参,实参不要求类型,仅是符号,函数需事先计算实参表达式的值,再代入形参宏展开中不求表达式的值,仅替换,没有值传递,函数是在运行时处理宏是在编译之前进行,带参数的宏与函数的区别,函数调用影响运行时间,源程序无变化宏展开影响编译时间,通常使源程序加长,函数调用有一个返回值 宏可以有多个结果,例:求最大值。(答案中用U代表空格)#i

6、nclude#define MAX(x,y)_A_main()float a,b,c,d;scanf(%f%f,_B_);c=MAX(a,b);d=MAX(3+a,4*b);printf(c=%f,d=%f.n,c,d);,A:xy?x:y,B:&a,&b,文件包含是指一个程序文件将另一个指定文件的全部内容包含进来。,格式:#include 或:#include“文件名”,8.2 文件包含,功能:,用指定文件的全部内容代换该预处理行,C程序通过#include预处理,把一个指定的文件的内容嵌入。只能包含ASCII文本文件。,与“”的区别:在TC标准目录下找指定文件“”在用户当前目录下找指定文件

7、,如用户当前目录下没有,再到TC标准目录下找。,说明,只包含源文件,不包含可执行文件和目标文件。,可以嵌套例如:file1.c需包含file2.c,file2.c包含file3.c,在file1中,用两次#include#include,必须将file3.h放在前面,一个#include只能包含一个文件,用途,将符号常量,带参数的宏及构造类型的变量等定义在一个独立的文件中,为其他文件共享。程序员可将工作中积累的有价值的符号,带参数的宏定义,或一些外部变量,通用的子程序定义成一个文件,需要时,包含进源程序。使用C中的库函数,需将所在的头文件包含进源程序。,“文件包含”示意图,file1.c fi

8、le2.c file1.c 包含#include”file2.c”B A B A(a)(b)(c),8.3条件编译,条件编译命令的形式 常用的有三种形式:形式一:#ifdef 宏名 程序段1;#else 程序段2;#endif,或者:#ifdef 宏名 程序段;#endif,形式二:#ifndef 宏名 程序段1;#else 程序段2;#endif其中,#ifndef语句的功能与#ifdef相反,如果宏名未定义则编译程序段1,否则编译程序2。,或者:#ifndef 宏名 程序段;#endif,形式三:#if 常数表达式 程序段1;#else 程序段2;#endif 功能:首先计算“常数表达式”

9、的值,如果为真(非零),就编译“程序段1”,否则编译“程序段2”。如果没有#else部分,则当“常数表达式”的值为0时,直接跳过#endif。,或者:#if 常数表达式 程序段;#endif,例:阅读程序。#include main()#if NULL printf(NULL is non-zero value!n);#else printf(NULL is zero value!n);#endif运行结果:NULL is zero value!,条件编译命令的嵌套,条件编译可以嵌套使用,如:#if表达式1程序段1;#else#if 表达式2 程序段2;#else 程序段3;#endif#endif,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号