九章预处理命令.ppt

上传人:sccc 文档编号:5317050 上传时间:2023-06-25 格式:PPT 页数:12 大小:243.03KB
返回 下载 相关 举报
九章预处理命令.ppt_第1页
第1页 / 共12页
九章预处理命令.ppt_第2页
第2页 / 共12页
九章预处理命令.ppt_第3页
第3页 / 共12页
九章预处理命令.ppt_第4页
第4页 / 共12页
九章预处理命令.ppt_第5页
第5页 / 共12页
点击查看更多>>
资源描述

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

1、第九章 预处理命令,9.1 宏定义9.2 文件包含9.3 条件编译,9.1 宏定义,9.1.1 不带参的宏定义1.形式:#define 标识符 字符串例#define PRICE 30#define NUMBER 10#define TOTAL PRICE*NUMBER main()printf(“TOTAL=%dn”,TOTAL);预编译后,程序为:main()printf(“TOTAL=%dn”,30*10);,2.说明:(1)不带参的宏常用来定义符号常量。(2)同一宏名可被重复定义,以最后的定义为准。(3)宏定义时,可引用已定义的宏名,层层置换。(4)宏展开时,只做简单的宏替换,不做任何

2、语法检查或运算。(5)双引号内的宏名不被置换。(6)宏名的有效范围是从定义开始到文件结束,可用命令“#undef 标识符”来终止作用域。(7)一个命令只定义一个宏。,9.1.2 带参的宏定义1.形式:#define 宏名(参数表)包含参数的字符串例 若有宏定义:#define s(a,b)a*b 且使用该宏:area=s(3,2);则预编译后,宏展开为:area=3*2;2.宏如何展开#define s(a,b)a*b area=s(3,2);,例#define PI 3.14#define s(r)PI*r*r main()float a=3.6,area;area=s(a);/*area=

3、3.14*3.6*3.6;*/printf(“area=%fn”,area);若main函数改为:main()float a=3.6,b=6.4,area;area=s(a+b);/*area=3.14*3.6+6.4*3.6+6.4;*/printf(“area=%fn”,area);,3.说明:(1)带参宏展开时,只是用实参简单地替换形参,并不会计算出实参值。(2)宏定义时,包含参数的字符串中的参数外面最好加一括弧。如:#define s(r)PI*(r)*(r)(3)带参宏定义时,宏名与括号之间不能加空格。若有定义:#define s(r)PI*r*r 则变为无参宏,展开为:area=(

4、r)PI*r*r(a);4.函数与带参宏的区别:(1)函数调用时,要先自右而左计算出实参值;而带参宏展开时,只做简单的字符替换,不计算实参值。,(2)函数的调用是在运行时进行的,且为形参分配存储空间;而宏展开是在预编译时进行的,并不为形参分配存储空间。(3)对于函数,要给出参数的类型;而宏则不存在类型问题。例#define N 2+1#define M(N+1)*N/2 main()int j;for(j=1;jM;j+)printf(“%2d”,j);,结果:1 2 3 4 5 6 7,9.2 文件包含,1.形式:#include#include“文件名”第一种形式用于库函数,第二种多用于用

5、户自定义函数。功能:预编译时,将被包含文件的内容全部复制到包含文件中。,/*format.h*/#define PR printf#define NL“n”#define D“%d”#define D1 D NL/*file1.c*/#include“format.h”main()int a=1;PR(D1,a);,文件包含处理后:/*file1.c*/#define PR printf#define NL“n”#define D“%d”#define D1 D NLmain()int a=1;PR(D1,a);,宏展开:printf(“%d”“n”,a);,说明:若被包含文件修改了,则包含此

6、文件的所有文件要重新编译。文件包含可嵌套P196。一个命令只包含一个文件,且要注意包含顺序。若文件1包含文件2,而文件2中要使用文件3的内容,则在文件1中应使用命令:#include“file3.h”#include“file2.h”,9.3 条件编译,源程序中的一部分内容只在满足一定条件时才进行编译。三种形式及功能#ifdef 标识符 程序段1#else 程序段2#endif 若宏定义了标识符,则执行程序段1;否则,执行程序段2。,2.#ifndef 标识符 程序段1#else 程序段2#endif若没有宏定义标识符,则执行程序段1;否则,执行程序段2。3.#if 表达式 程序段1#else 程序段2#endif 若表达式的值为真,则执行程序段1;否则,执行程序段2。,

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

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号