C语言课件:第九章预处理命令.ppt

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

《C语言课件:第九章预处理命令.ppt》由会员分享,可在线阅读,更多相关《C语言课件:第九章预处理命令.ppt(14页珍藏版)》请在三一办公上搜索。

1、第 9 章 预处理命令,9.1 编译预处理,“编译预处理”是 C 与其它高级语言的一个重要区别。,宏定义;,文件包含;,条件编译;,1.宏定义,1)不带参数的宏定义,用指定的标识符(宏名)代表一个常量或字符串:,#define 标识符 常量/字符串,它们是:,例9.1 求正圆锥体的底周长、底面积和它的体积。,#define PI 3.1415926 main()float l,s,r,v;scanf(“%f”,宏名 PI 用大写,行末无分号,宏名的有效范围为该宏定义命令之后至本源文件结束。,通常,宏定义命令一般写在文件开头或函数之前作为该文件的一部分。,可以用#undef 命令终止宏定义的作用

2、域。,如:,#define G 9.8main(),进行宏定义时,可以引用已定义的宏名,层层置换。,对程序中用双引号括起来的字符串,即使与宏名相同 也不会被置换。,#undef Gfloat f(),2带参数的宏定义,语句形式:,#define 宏名(形参表)表达式,例9.3#define PI 3.1415926#define S(r)PI r rmain()float a,area;a=3.6;area=S(a);printf(“r=%f narea=%f n”,a,area);,area=3.1415926aa,但不会置换a为3.6,对带参数的宏定义的置换展开是用“表达式”对等的置 换“

3、形参表”中的参数。上例中的“”是不会被置换的。,若将area=S(a)改写成 area=S(a+2),,将置换为:,area=PI a+2a+2,,而不是:area=PI(a+2)(a+2)。,若要达到后者之目的,则应将宏定义命令改写为:#define S(r)PI(r)(r),宏名与括号之间不得有空格,因为宏名与表达式之间 的分隔符为空格。,如果用#define S(r)PI r r 的 话,则被置换为 area=(r)PI r r(a),宏展开并不进行值的传递,即不求表达式的值,也没 有“返回值”的概念。,宏不存在类型问题,宏名无类型,参数也无类型,表 达式可以是任何类型。,定义带参数的宏

4、,可以实现一些简单的函数功能。,如:#define MAX(x,y)(x)(y)?(x):(y)main()int a,b,c,t;t=MAX(a+b,c+d);,注:这里的 t 展开后为 t=(a+b)(c+d)?(a+b):(c+d),如果第一行写成:#define MAX(x,y)xy?x:y,则这里的 t 展开后为 t=a+bc+d?a+b:c+d,因为置换展开是用“表达式”对等 的置换“形参表”中的参数,9.2“文件包含”处理,在C中可以用#include 命令实现一个文件包含另一个文件。,语句形式:,#include“文件名”,例:#include“stdio.h”#define

5、N 2#define M N+1#define NUM(M+1)M/2main()int i,n=1;for(i=1;i=NUM;i+)n+;printf(“%2d”,n);printf(“n”);,输出结果:1 2 3 4 5 6 7 8,NUM 被代换展开后为:(2+1+1)2+1/2,一个include命令只能指定一个被包含文件,如果要 包含 n 个文件,则要用 n 个 include 命令。,如果“文件1”包含“文件2”,而“文件2”又包含“文件3”,则可在“文件1”中使用两个 include 命 令。,即:,文件file1.c#include“file3.h”#include“fil

6、e2.h”,file3.h 应出现在 file2.h 之前,文件包含可以嵌套。即一个被包含文件中又可以包含 另一个文件。,如:,文件file1.c#include“file2.h”,文件file2.c#include“file3.h”,在#include 命令中,文件名既可用双引“”号也可用尖括号括起来。但用双引号更方便系统查找被包含的文件。,9.3 条件编译,1条件编译的语句形式,其作用是:如果“标识符”已定义,则编译“程序段1”,否则编译“程序段2”。,“标识符”一般为#define命令所定义。,其中的“程序段1”或“程序段2”可以是命令,也可以是 语句或语句组。,#else部分可有可无。

7、,所谓“标识符已定义”是无论“标识符”定义为什么内容。,用条件编译的作用是缩短编译时间,减少目标程序的 长度。,例:#ifdef IBM_PC#define INTEGER_SIZE 16#else#define INTEGER_SIZE 32#endif,其作用是:如果“标识符”未定义,则编译“程序段1”,否则编译“程序段2”。,其作用是:当“表达式”值为非0,则编译“程序段1”,否则编译“程序段2”。,例 9.7#define LETTER 1main()char str20=“C language”,c;int i;i=0;while(c=stri!=0)i+;#if LETTER if(c=a,运行结果:C LANGUAGE,例2:#define N 2#define M N+1#define NUM 2M+1main()int i;for(i=1;i=NUM;i+)printf(“%dn”,i);,例1:#define MAX(x,y)(x)(y)?(x):(y)main()int a=5,b=2,c=3,d=3,t;t=MAX(a+b,c+d)10;printf(“%dn”,t);,t 的值是多少?,程序中的 for 循环执行的次数是多少?,

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

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


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号