九章预处理命令.ppt

上传人:本田雅阁 文档编号:2571179 上传时间:2019-04-10 格式:PPT 页数:12 大小:243.01KB
返回 下载 相关 举报
九章预处理命令.ppt_第1页
第1页 / 共12页
九章预处理命令.ppt_第2页
第2页 / 共12页
九章预处理命令.ppt_第3页
第3页 / 共12页
亲,该文档总共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)宏定义时,可引用已定义的宏名,层层置换。

2、(4)宏展开时,只做简单的宏替换,不做任何语法检查或运算。 (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 mai

3、n( ) float a=3.6, area; area=s(a); /*area=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)

4、带参宏定义时,宏名与括号之间不能加空格。 若有定义: #define s (r) PI*r*r 则变为无参宏,展开为:area=(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(

5、“%2d”, j); ,结果: 1 2 3 4 5 6 7,9.2 文件包含,1. 形式: #include #include“文件名” 第一种形式用于库函数,第二种多用于用户自定义函数。 功能:预编译时,将被包含文件的内容全部复制到包含文件中。,/*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 #

6、define NL “n” #define D “%d” #define D1 D NL main( ) int a=1; PR(D1,a); ,宏展开:printf(“%d” “n”,a);,说明: 若被包含文件修改了,则包含此文件的所有文件要重新编译。 文件包含可嵌套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备18001539号-1