本次内容:编译预处理 教学目的:掌握宏替换方法及应用,文件包含概念及应用。 重点:宏替换、文件包含和头文件 难点:利用宏替换设计头文件 预习: #define pi 3.1415926 #definer 2.0 double sfo return(PI“R*R); double ifo return(2.0*PIR); maIn (0 { printf((“s=%lf,l=%Ifn”,sfO,lfO;
本次内容:编译预处理 教学目的:掌握宏替换方法及应用,文件包含概念及应用。 重点:宏替换、文件包含和头文件 难点:利用宏替换设计头文件 预习: #define PI 3.1415926 #define R 2.0 double sf() { return(PI*R*R); } double lf() { return(2.0*PI*R); } main() {printf(“s=%lf,l=%lf\n”,sf(),lf(); }
编译预处理:编译前对源程序进行的预加工。按源程序中的预处 理命令进行。 预处理命令:以“#”开头,末尾不加分号,可以出现在程序中任 何位置。 命令作用域:自出现点到源程序末尾 如:# include“ 'stdio. h” 、宏替换 宏替换:用预处理命令# delfina指定的预处理。 1、字符串宏替换 (1)简单替换 # define宏名宏体 s #define PI 3. 1415926 double f10 double f10 「等价〉 returne(2.0*31415926*10); return(2.0*PI10) 特点:易读、易修改
编译预处理:编译前对源程序进行的预加工。按源程序中的预处 理命令进行。 预处理命令:以“#”开头,末尾不加分号,可以出现在程序中任 何位置。 命令作用域:自出现点到源程序末尾。 如:#include “stdio.h” 一、宏替换 宏替换:用预处理命令#delfine指定的预处理。 1、字符串宏替换 (1)简单替换 #define 宏名 宏体 如:#define PI 3.1415926 double f1() { return(2.0*PI*10); } 特点:易读、易修改。 double f1() { return(2.0* 3.1415926 *10); } 等价
2)带参替换 # define标识符(形参表)宏体 如:# define px(r)2.0PI(r)体前面已定义PⅠ*/ l=px(10); 特点:*时间效率高(与函数比) 只是简单字符替换,不进行计算(函数参数可计算 副作用(P132) 2、书写# define注意问题 (1)宏名与宏体间加空格 th #define PI 3. 1415926 (2)宏名不能用引号括起来 如:# define“P3.1415926是错误的 (3较长定义可在尾用“、”结束以示续行 如:# define prx printf(“ Shanxi economic Management University (4)带参宏定义,各参数用括号括起来 如:# efine SqU(x)(x)“(x)
(2)带参替换 #define 标识符(形参表) 宏体 如:#define px( r ) 2.0*PI*( r ) /*前面已定义PI*/ : l=px( 10 ); : 特点 : * 时间效率高(与函数比) * 只是简单字符替换,不进行计算(函数参数可计算) *副作用(P132) 2、书写#define注意问题 (1)宏名与宏体间加空格 如:#define PI 3.1415926 (2)宏名不能用引号括起来 如:#define “PI” 3.1415926 是错误的 (3)较长定义可在尾用“、”结束以示续行 如:#define PRX printf(“Shanxi Economic \ Management University”) (4)带参宏定义,各参数用括号括起来 如:#define SQU(x) ((x)*(x))
(5)宏定义可写在源程序的任何地方,但要写在应用之前,也可多 个宏定义集中在一个文件中(头文件)。 如:将如下内容保存于 inci. h文件中 #define l1 1 #define 2 2 #define 3 3 编辑方法同.c文件,保存时要加扩展名.h。 如下程序中引用 define“ inci. h” maino printf("%dt%dt%dn",I1, 2, 13) 结果: 2 (6)已定义的宏可用# define撤消。 如: define oK1 define ok/撒消了OK的宏定义
(5)宏定义可写在源程序的任何地方,但要写在应用之前,也可多 个宏定义集中在一个文件中(头文件)。 如:将如下内容保存于inci.h文件中。 #define I1 1 #define I2 2 #define I3 3 编辑方法同.c 文件,保存时要加扩展名.h 。 如下程序中引用 #define “inci.h” main() { printf(“%d\t%d\t%d\n”,I1,I2,I3); } 结果:1 2 3 (6)已定义的宏可用#define撤消。 如:define OK 1 : define OK /*撤消了OK的宏定义*/
文件包含 文件包含:通过 nclude把已进入系统的另一个文件的整个内容 嵌进来。 格式1 include“文件标识” 标识符中含有文件路径。预处理程序先在原来的源文件目录中检 索该指定的文件;如果未找到,则再按标准方式检索其它文件目 录,直到找到为止。 格式2 include 预处理程序只按标准方式检索文件目录。 文件包含是一种模块化程序设计的手段,在程序设计时,可以把 批具有公用性的宏定义、数据结构及函数说明集中起来,单独 构成一个文件。如P135图4.13
二、文件包含 文件包含:通过#include把已进入系统的另一个文件的整个内容 嵌进来。 格式1 #include “文件标识” 标识符中含有文件路径。预处理程序先在原来的源文件目录中检 索该指定的文件;如果未找到,则再按标准方式检索其它文件目 录,直到找到为止。 格式2 #include 预处理程序只按标准方式检索文件目录。 文件包含是一种模块化程序设计的手段,在程序设计时,可以把 一批具有公用性的宏定义、数据结构及函数说明集中起来,单独 构成一个文件。如P135_图4.13
小结: 、宏替换 2、文件包含 作业: P1414.17、4.18 课堂练习: 输出如下图形。 水半水 z 水水水 半水水 水半水半水 水水水水半水*水
小结: 1、宏替换 2、文件包含 作业: P141_4.17、4.18 课堂练习: 输出如下图形。 * ** *** **** ***** ***** **** *** ** * * *** ***** ******* *********