南京师范大学:《C程序设计》第八章 预编译命令

C程序设计 主讲教师:汪闽 南京师范大学 地图学与地理信息系统04级 专业选修课
C程序设计 南京师范大学 地图学与地理信息系统04级 专业选修课 主讲教师: 汪闽

第八章编译预处理 8.1宏定义 8.2文件包含 8.3条件编译
第八章 编译预处理 8.1 宏定义 8.2 文件包含 8.3 条件编译

作用:对源程序编译之前做一些处理生成扩展C 源程序 >种类 宏定义# define 文件包含# Include 条件编译#if-+#else-# endif等 格式: “#开头 占单独书写行 语句尾不加分号
– 作用:对源程序编译之前做一些处理,生成扩展C 源程序 ➢种类 • 宏定义 #define • 文件包含 #include • 条件编译 #if--#else--#endif等 – 格式: • “#”开头 • 占单独书写行 • 语句尾不加分号

8.1宏定 宏体可缺省,表示宏名 定义过或取消宏体 8.1.1不带参数宏定义 一般形式:# define宏名[宏体] 功能:用指定标识符(宏名)代替字符序列(宏体) 定义位置:任意(一般在函数外面) 作用域:从定义命令到文件结束 # undef可终止宏名作用域 格式:# undef宏名 宏展开:预编译时,用宏体替换宏名--不作语法检查 引号中的内容与宏名相同也不置换 宏定义可嵌套,不能递归 例# efine maX max+10 宏定义中使用必要的括号()
8.1.1 不带参数宏定义 • 一般形式: #define 宏名 [宏体] • 功能:用指定标识符(宏名)代替字符序列(宏体) 宏展开:预编译时,用宏体替换宏名---不作语法检查 宏体可缺省,表示宏名 定义过或取消宏体 定义位置:任意(一般在函数外面) 作用域:从定义命令到文件结束 #undef可终止宏名作用域 格式: #undef 宏名 宏定义可嵌套,不能递归 例 #define MAX MAX+10 () 引号中的内容与宏名相同也不置换 宏定义中使用必要的括号() 8.1 宏定义

8.1.2带参数宏定义 一般形式:#efne宏名(参数表)宏体 例# define s(ab)a” 不能加空格 area=S(3, 2) 宏展开: area=3 *2 宏展开:形参用实参换,其它字符保留 宏体及各形参外一般应加括号() 例 D大大 相例# efine power(x)X*x X=4;y=6; Z=POWER(X+y) 宏展开:z=+y*Xty 般写成:# define PoWer(x(×)*(×) 宏展开:z=(X+y)*(xy);
• 一般形式: #define 宏名(参数表) 宏体 例 #define S (r) PI*r*r 相当于定义了不带参宏S,代表字符串“(r) PI*r*r” 宏展开:形参用实参换,其它字符保留 宏体及各形参外一般应加括号() 例 #define S(a,b) a*b ……….. area=S(3,2); 宏展开: area=3*2; 不能加空格 例 #define POWER(x) x*x x=4; y=6; z=POWER(x+y); 宏展开:z=x+y*x+y; 一般写成: #define POWER(x) ((x)*(x)) 宏展开: z=((x+y)*(x+y)); 8.1.2带参数宏定义

例用宏定义和函数实现同样的功能 #define MAX(x, y)(x)>(y)?(x): (y) int max(int x, int y) i return(xy?x y) main i int a, b, c, d, t main i int a, b, c, d, t t=MAX(a+b, c+d) t=max(a+b, c+d) 宏展开:t=(a+b)>(c+o?(a+b)(c+d)
#define MAX(x,y) (x)>(y)?(x):(y) ……. main() { int a,b,c,d,t; ……. t=MAX(a+b,c+d); …… } 宏展开:t=(a+b)>(c+d)?(a+b):(c+d); int max(int x,int y) { return(x>y?x:y); } main() { int a,b,c,d,t; ……. t=max(a+b,c+d); ……… } 例 用宏定义和函数实现同样的功能

带参的宏与函数区别 带参宏 函数 处理时间编译时 程序运行时 参数类型无类型问题 定义实参形参类型 处理过程不分配内存 分配内存 程序长度变长 不变 运行速度不占运行时间 调用和返回占时间
带参宏 函数 处理过程 不分配内存 简单的字符置换 分配内存 先求实参值,再代入形参 处理时间 编译时 程序运行时 参数类型 无类型问题 定义实参,形参类型 程序长度 变长 不变 运行速度 不占运行时间 调用和返回占时间 带参的宏与函数区别

8.2文件包含 功能:一个源文,标准日录报索 先在当前目录搜索,再搜索标准目 包含进来 可指定路径 一般形式:# include“文件名” 或# include<文件名 处理过程:预编译时,用被包含文件的内容取代该预处理命 令,再对“包含”后的文件作一个源文件编译 # include“fle2.c file2.c A file2.c filel.c filel.c
– 功能:一个源文件可将另一个源文件的内容全部 包含进来 – 一般形式: #include “文件名” 或 #include #include “file2.c” file1.c file2.c file1.c file2.c A B A 处理过程:预编译时,用被包含文件的内容取代该预处理命 令,再对“包含”后的文件作一个源文件编译 <> 直接按标准目录搜索 “” 先在当前目录搜索,再搜索标准目录 可指定路径 8.2 文件包含

被包含文件内容 file3. c 源文件(*c) file2.c 宏定义 头文件(*h) filel.c 数据结构定义 A 文件包含可嵌套 函数说明等 # include“fie2c”|# include“fle3c” A B file3 filel.c file2.c
• 源文件(*.c) • 头文件(*.h) 宏定义 数据结构定义 函数说明等 文件包含可嵌套 #include “file2.c” file1.c A file3.c C #include “file3.c” file2.c B file1.c A file3.c file2.c 被包含文件内容

例文件包含举例 powers h * #define sqr(x)((x)*(x)) #define cube(x)((x)*(x)(x) #define quad(x)((x)*(x)*(x)*(x)) /*ch810c*/ #include #include"d: fengyi bkclpowers h #define maX poWer 10 void main Int n printf("number it exp2 \t exp t exp4 n") print atf( n"); for(n=l; n<=MAX POWER; n++) printf( %2d t%3dt%4dt %5dn" n, sqr(n), cube(n), quad(n))
/* powers.h */ #define sqr(x) ((x)*(x)) #define cube(x) ((x)*(x)*(x)) #define quad(x) ((x)*(x)*(x)*(x)) /*ch8_10.c*/ #include #include "d:\fengyi\bkc\powers.h" #define MAX_POWER 10 void main() { int n; printf("number\t exp2\t exp3\t exp4\n"); printf("----\t----\t-----\t------\n"); for(n=1;n<=MAX_POWER;n++) printf("%2d\t %3d\t %4d\t %5d\n",n,sqr(n),cube(n),quad(n)); } 例 文件包含举例
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- 南京师范大学:《C程序设计》第五章 循环结构程序设计.ppt
- 南京师范大学:《C程序设计》第二章 数据类型、运算符号与表达式.ppt
- 南京师范大学:《C程序设计》第九章 指针.ppt
- 南京师范大学:《C程序设计》第三章 顺序程序结构设计.ppt
- 南京师范大学:《C程序设计》第七章 函数3 new.ppt
- 南京师范大学:《C程序设计》第一章 C语言概论.ppt
- 华中科技大学:《计算机图形学基础》课程电子教案(PPT教学课件)第9章 消隐.ppt
- 华中科技大学:《计算机图形学基础》课程电子教案(PPT教学课件)第8章 曲线和曲面.ppt
- 华中科技大学:《计算机图形学基础》课程电子教案(PPT教学课件)第7章 三维变换及三维观察.ppt
- 华中科技大学:《计算机图形学基础》课程电子教案(PPT教学课件)第6章 二维变换及二维观察.ppt
- 华中科技大学:《计算机图形学基础》课程电子教案(PPT教学课件)第5章 基本图形生成算法.ppt
- 华中科技大学:《计算机图形学基础》课程电子教案(PPT教学课件)第4章 造型技术.ppt
- 华中科技大学:《计算机图形学基础》课程电子教案(PPT教学课件)第3章 交互式技术.ppt
- 华中科技大学:《计算机图形学基础》课程电子教案(PPT教学课件)第2章 图形设备.ppt
- 华中科技大学:《计算机图形学基础》课程电子教案(PPT教学课件)第1章 引言(主讲:陆枫).ppt
- 华中科技大学:《计算机图形学基础》课程电子教案(PPT教学课件)第10章 真实感图形绘制.ppt
- 上海理工大学:《电子商务基础与应用》课程PPT教学课件资源(第四版)第一章 认识电子商务.ppt
- 荆州职院:《计算机网络基础》首页.ppt
- 荆州职院:《计算机网络基础》第8章 网络安全.ppt
- 荆州职院:《计算机网络基础》第7章 internet技术.ppt
- 南京师范大学:《C程序设计》第六章 数组.ppt
- 南京师范大学:《C程序设计》第十一章 文件.ppt
- 南京师范大学:《C程序设计》第十章 结构体和共用体.ppt
- 南京师范大学:《C程序设计》第四章 选择结构程序设计.ppt
- 《AutoCAD 2006中文版标准教程》教学资源(PPT课件)每章习题.doc
- 《AutoCAD 2006中文版标准教程》教学资源(PPT课件)每章习题答案与提示.doc
- 《AutoCAD 2006中文版标准教程》教学资源(PPT课件)第十章 图纸布局与打印输出.ppt
- 《AutoCAD 2006中文版标准教程》教学资源(PPT课件)第十一章 共享AutoCAD数据和协同设计.ppt
- 《AutoCAD 2006中文版标准教程》教学资源(PPT课件)第十二章 创建三维模型.ppt
- 《AutoCAD 2006中文版标准教程》教学资源(PPT课件)第十三章 图纸集.ppt
- 《AutoCAD 2006中文版标准教程》教学资源(PPT课件)第一章 认识 AutoCAD.ppt
- 《AutoCAD 2006中文版标准教程》教学资源(PPT课件)第二章 设置绘图环境.ppt
- 《AutoCAD 2006中文版标准教程》教学资源(PPT课件)第三章 创建和编辑二维图形对象(一).ppt
- 《AutoCAD 2006中文版标准教程》教学资源(PPT课件)第四章 创建和编辑二维图形对象(二).ppt
- 《AutoCAD 2006中文版标准教程》教学资源(PPT课件)第五章 对象特性与图层.ppt
- 《AutoCAD 2006中文版标准教程》教学资源(PPT课件)第六章 利用绘图辅助工具精确绘图.ppt
- 《AutoCAD 2006中文版标准教程》教学资源(PPT课件)第七章 文字与表格.ppt
- 《AutoCAD 2006中文版标准教程》教学资源(PPT课件)第八章 尺寸标注.ppt
- 《AutoCAD 2006中文版标准教程》教学资源(PPT课件)第九章 块的使用.ppt
- 《SQL Server应用开发技术》第1章 数据库原理概述.ppt