《第8章_编译预处理课件.ppt》由会员分享,可在线阅读,更多相关《第8章_编译预处理课件.ppt(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第8章_编译预处理ppt课件(全)第第8章章 编译预处理编译预处理第8章_编译预处理ppt课件(全)第第8章章 编译预处理编译预处理8.1 宏定义宏定义8.2 文件包含文件包含 8.3 条件编译条件编译 第8章_编译预处理ppt课件(全) #define 宏名宏名 字符串字符串 8.1 宏定义宏定义不带参数的宏定义不带参数的宏定义标识符标识符例如:例如: #define PI 3.1415926宏展开宏展开: 将将宏名宏名替换成替换成字符串字符串的过程的过程第8章_编译预处理ppt课件(全)【例【例8.1】使用宏定义的例子。】使用宏定义的例子。#include#define R 3.0#def
2、ine PI 3.1415926#define L 2*PI*R#define S PI*R*Rvoid main()printf(L=%.2fnS=%.2fn, L , S ); 宏展开:宏展开:printf(“L=%.2fnS=%.2fn”, 2*3.1415926*3.0, 3.1415926*3.0*3.0);说明:说明:(1) 宏名习惯用大写字母。宏名习惯用大写字母。(2) 一个宏名只能被定义一次。一个宏名只能被定义一次。(3) 可用已定义的宏名定义新的宏名。可用已定义的宏名定义新的宏名。如例如例7.1(4) 字符串常量及用户标识符中与宏名字符串常量及用户标识符中与宏名相同的部分不作
3、替换。相同的部分不作替换。如定义如定义#define L 1234则在则在printf(“L=”,)及变量及变量Length中的中的L不作替换。不作替换。 (5) 宏定义的作用域:从定义开始到程宏定义的作用域:从定义开始到程序结束。序结束。(6) 当宏定义换行时,要在行尾加当宏定义换行时,要在行尾加 “”。例如:例如:#define PI 3.1415926第8章_编译预处理ppt课件(全)#define 宏名宏名(形参表形参表) 字符串字符串8.1.2 带参数的宏定义带参数的宏定义例如:例如:#define M(a,b) a*barea=M(3,7);宏展开:宏展开:area=3*7; 【例
4、【例8.2】分析下面程序的执行】分析下面程序的执行结果。结果。#include #define M(x,y) (x*y) void main() int a=2,b=3,c,d; c=M(a,b); /* c=(a*b) */ d=M(a+1,b+1); /* d=(a+1*b+1) */ printf(c=%d, d=%dn,c,d);程序运行结果:程序运行结果:c=6, d=6第8章_编译预处理ppt课件(全) #undef 宏名宏名8.1.3 终止宏定义终止宏定义例如:例如:#define PI 3.14void main() #undef PI 第8章_编译预处理ppt课件(全)文件包
5、含(文件包含(file inclusion)预处理)预处理命令有两种格式:命令有两种格式: #include“文件名文件名” #include 8.2 文件包含文件包含如:如: #include在在stdio.h文件中有:文件中有:#define EOF -l#define NULL 0当前目录当前目录系统指定目录系统指定目录系统指定目录系统指定目录第8章_编译预处理ppt课件(全)【例【例8.3】一个程序写在多个源文件中的应用举例。】一个程序写在多个源文件中的应用举例。 经过编译预处理后:经过编译预处理后: int fun1(int a,int b) return a+b;int fun2(
6、int a,int b) return a*b;void main()printf(%dn,fun1(3,5); printf(%dn,fun2(3,5);源文件源文件ex703.c中的内容:中的内容:#include#includeex703_1.c#includeex703_2.cvoid main()printf(%dn,fun1(3,5); printf(%dn,fun2(3,5);源文件源文件ex703_1.c中的内容:中的内容:int fun1(int a,int b) return a+b;源文件源文件ex703_2.c中的内容:中的内容:int fun2(int a,int b) return a*b;