中国高校课件下载中心 》 教学资源 》 大学文库

长江大学:《C语言程序设计》PPT课件_第九章 预处理命令

文档信息
资源类别:文库
文档格式:PPT
文档页数:11
文件大小:92KB
团购合买:点击进入团购
内容简介
长江大学:《C语言程序设计》PPT课件_第九章 预处理命令
刷新页面文档预览

第9章第1节 第九章预处理命令 预处理的概念 C程序的运行过程 source fille→ compile→ink→→ execute 源文件 编译 联接 运行 preprocessing 编译预处理 宏定义 宏定义命令 C提供的预处理功能了文件包含 文件包含命令 条件编译 条件编译命令

第9章第1节 ***预处理的概念*** C程序的运行过程 source file 源文件 compile 编译 link 联接 execute 运行 preprocessing 编译预处理 C提供的预处理功能 宏定义 文件包含 条件编译 宏定义命令 文件包含命令 条件编译命令

第9章第1节 §91宏定义 一.不代参数的宏定义 1.形式 # define标识符字符串 无分号 串字符 即宏名。命名规则与变量名相同, 习惯上用大写字母 2.作用用宏名代表一个字符串。 凡程序中出现宏名之处均用字符中替代——宏展开 define pl 3.1416 maint ain float ls, r, v; Float l,s, r, v; print“ input radius:”); printf("input radius:) scanf("%of, &r) 宏展开 scanf(“%f,&r); l=2.0*3.1416r l=2.0*PIr; s=3.1416*rr; s=PIRara v=4.0/3.0*Perrers V=3.0/4.0*3.1416r*r*r; prin tf“12s,v%,%f%fm”,s,v); prin ti(“4,s,v=%f%f,%fn”,,s,v);

第9章第1节 §9.1 宏 定 义 一. 不代参数的宏定义 1. 形式 # define 标识符 字符串 2. 作用 用宏名代表一个字符串。 凡程序中出现宏名之处均用字符中替代——宏展开 无分号 一串字符 即宏名。命名规则与变量名相同, 习惯上用大写字母 # define PI 3.1416 main() {float l,s,r,v; printf(“input radius:”); scanf(“%f”,&r); l=2.0*PI*r; s=PI*r*r; v=4.0/3.0*PI*r*r*r; prin tf(“l,s,v=%f,%f,%f\n”,l,s,v); } main() {float l,s,r,v; printf(“input radius:”); scanf(“%f”,&r); l=2.0*3.1416*r; s=3.1416*r*r; v=3.0/4.0*3.1416*r*r*r; prin tf(“l,s,v=%f,%f,%f\n”,l,s,v); } 宏展开

第9章第1节 3.有关问题的说明 1)宏展开时,字符串一→宏名。故可将一些常量定义为宏 #define n50 main( 宏展开main0 i int a N; f int a 50; 宏开时,不检查字符串的意义,应注意这些字符引起的问题 define pl3 1416 malI 宏展开 area=Pr*r area=3. 1416: *r*r: t define pi 3. 1416 define pi3 1416: main maino 宏展开 area=rr*PI: area=r*r*3,1416; 尚可

3. 有关问题的说明 1) 宏展开时,字符串 宏名。故可将一些常量定义为宏 宏开时,不检查字符串的意义,应注意这些字符引起的问题 #define N 50 main() { int a[N]; ....} main() { int a[50]; ....} 宏展开 # define PI 3.1416; main() {...... area=PI*r*r; ...... } main() {...... area=3.1416;*r*r; ...... } 宏展开 # define PI 3.1416; main() {...... area=r*r*PI; ...... } # define PI 3.1416; main() {...... area=r*r*3.1416;; ...... } ??? 尚可 宏展开 第9章第1节

第9章第1节 2)宏定义的位置和有效范围 位置—函数以外,一般在文件开头,函数之前 有效范围从定义处到文件结東或#nde命令处。 #define g 9.8 →→终止宏定义 main G的有效范围 #undef g f10 3)定义宏时可引用已定义过的宏 f define r3 define pl3 1416 maino # define L2中PR展升,钿 printf“L=%fnS=%「m”,2*3.1416*3,3.1416*33) f define s plr*r man print“L=%fnS=%fn”,L,S); 注:双引号中的内容不展开

2). 宏定义的位置和有效范围 位置——函数以外,一般在文件开头,函数之前 有效范围——从定义处到文件结束或#undef命令处。 #define G 9.8 终止宏定义 main() {.... } #undef G f1() {..... } G的有效范围 3). 定义宏时可引用已定义过的宏 # define R 3 # define PI 3.1416 # define L 2*PI*R # define S PI*R*R main() {printf(“L=%f\nS=%f\n”,L,S); } main() {printf(“L=%f\nS=%f\n”,2*3.1416*3,3.1416*3*3); } 展开 注:双引号中的内容不展开 第9章第1节

第9章第1节 二.代参数的宏定义 1形式 # define宏名(参数表)字符串 #define s(a, b)ab 相当于S(a,b)←令a*b 如函数中有: area=S(3, 2); area=3*2:3,2是实参,代替形参b 不是参数,保留 #define s(a, b) a*b t define pi 3.1416 # define s(r)PI“r*r main float a, area; a=36; area=S(a): area=P*rr:一→area=3.1416*3.6*3.6; printf(%fm”,area);

二. 代参数的宏定义 1.形式 # define 宏名(参数表) 字符串 #define S(a,b) a*b 相当于 S(a,b) a*b 如函数中有: area=S(3,2); #define S(a, b) a*b area=3*2; 3,2是实参,代替形参a,b *不是参数,保留 # define PI 3.1416 # define S(r) PI*r*r main() {float a,area; a=3.6; area=S(a); printf(“%f\n”,area); } area=PI*r*r; area=3.1416*3.6*3.6; 第9章第1节

第9章第1节 2.有关问题的说明 1)宏名后的实参—常量,变量,表达式 注意展开后语句的意义可能发生变化 如:# define s(a,b)ab 本意:area=(2+3)(1+2); area=S(2+3,1+2); 展开 实际为:area=2+3*1+2; 应为:# define s(a,b)(a)*(b) 展开 area=S(2+3,+2); area=(2+3)*(1+2); 没问题了吗? 展开 如有:x=S(2,3)/S(4,5); 相当于:x=2*3/4*5 X=(2)*(3)(4)(5); 而非:x=(2*3)(4*5) 进一步改为:# define s(a,b)(a)(b) 展开 x=S(2,3)S(4,5); x=(2)(3)(4)(5);相当于:x=(2*3)(4*5)

2. 有关问题的说明 1)宏名后的实参——常量,变量,表达式 注意展开后语句的意义可能发生变化 如:#define S(a,b) a*b area=S(2+3,1+2); 实际为:area=2+3*1+2; 本意:area=(2+3)*(1+2); 展开 应为:#define S(a,b) (a)*(b) area=S(2+3,1+2); area=(2+3)*(1+2); 展开 没问题了吗? 如有: x=S(2,3)/S(4,5); x=(2)*(3)/(4)*(5); 相当于:x=2*3/4*5 而非:x=(2*3)/(4*5) 进一步改为:#define S(a,b) ((a)*(b)) x=S(2,3)/S(4,5); x=((2)*(3))/((4)*(5)); 相当于:x=(2*3)/(4*5) 展开 展开 第9章第1节

第9章第1节 2利用宏得到多个结果 例94 #define pi3 1416 #define CIRCLE(R, L, S,V) L=2*PI*R; S=PI*R*R; V=4.0/3.0*PIR* R main i float r,l, S, v; scanf(“%f,&r); 展开 CIRCLE(rl, s, v); 1=2*3.1416*;,s=3.1416*r*r;V40/3.0*3.1416**r*r; printi〔“r;s,v=%f%f%;%fn”,r,s,v); 分析: ↓↓↓↓ #define CirCle(r, L, S,v) L=2*PIR; S=PIR*R;V=4.0/3.0*PI*R*R CiRCLE(r, I, S, v); l=2*3.1416r;s=3.1416r*r;V=4.0/3.0*3.1416rir*r

2)利用宏得到多个结果 例9.4 #define PI 3.1416 #define CIRCLE(R,L,S,V) L=2*PI*R; S=PI*R*R; V=4.0/3.0*PI*R*R*R main() { float r,l,s,v; scanf(“%f”,&r); CIRCLE(r,l,s,v); printf(“r,l,s,v=%f,%f,%f,%f\n”,r,l,s,v); } #define CIRCLE(R,L,S,V) L=2*PI*R; S=PI*R*R; V=4.0/3.0*PI*R*R*R 分析: CIRCLE(r, l, s, v); l=2*3.1416*r; s=3.1416*r*r; v=4.0/3.0*3.1416*r*r*r l=2*3.1416*r; s=3.1416*r*r; v=4.0/3.0*3.1416*r*r*r; 展开 第9章第1节

第9章第2节 §92“文件包含”处理 概念 如一程序的多个函数存放在不同的文件中,可用“文件包含”命令 include,将其他文件包含到一个文件中,作为一个整体进行编译。 1.命令形式 # include“文件名” # include file2.c filel.c filel.c 复制 # nclude“file2c” B B

第9章第2节 §9.2 “文件包含”处理 一. 概念 如一程序的多个函数存放在不同的文件中,可用“文件包含”命令 #include, 将其他文件包含到一个文件中,作为一个整体进行编译。 1. 命令形式 # include “文件名” # include file2.c file1.c B A #include “file2.c” 复制 B A file1.c

第9章第2节 二、应用 1.引用库函数如: # include“ math. h” # include“ stdio.h” 2.运行多文件程序 filel.c file2. c: # include“fle2.c f10 maino f10 3将常用、公用的符号、数值定义成宏,然后编成一个文件,供其他文件引用 compile. h filel.c define pi 3.1416 # include“ compile.h” define g 9.8 main define e 2.718 float s,r; f define pr printf int a=1.b=2: define nl“n” scanf("%f, r); # define d“%d s=P*ror define didn PROL a);

第9章第2节 二. 应用 1. 引用库函数 如: #include“math.h” #include“stdio.h” 2. 运行多文件程序 #include “file2.c” main() {... f1(); } f1() { ...... } file1.c: file2.c: 3.将常用、公用的符号、数值定义成宏,然后编成一个文件,供其他文件引用 # define PI 3.1416 # define G 9.8 # define e 2.718 # define PR printf # define NL “\n” # define D “%d” # define D1 D NL ...... comfile.h file1.c # include “comfile.h” main() {float s,r; int a=1,b=2; scanf(“%f”,r); s=PI*r*r; PR(D1,a); ......}

第9章第2节 三,说明1.一个机 nclude命令只能包含一个文件 2.注意# include的顺序 如: r file 1. c要用file2c的内容 fie2c要用 files3.c的内容 filel. c中 file2.c file3.c # include“file3.c include“file2.c” f10 n20 方法A maIn n20); n0; 无# incide命令 flel. c中 file2.c file3. c # nclude“fle2.c # include“file3.c” n20 mali 方法B f10 n0; n20 无#ncde命令

第9章第2节 三. 说明 1. 一个#include命令只能包含一个文件 2. 注意 # include 的顺序 如: file 1.c 要用 file2.c 的内容 flie2.c 要用 files3.c的内容 file1.c中 file2.c #include“file3.c” #include“file2.c” main() {... f1(); ...} f1() {... f2(); ...} file3.c f2() {... ...} 无#inclde命令 #include“file2.c” main() {... f1(); ...} file1.c中 #include“file3.c” f1() {... f2(); ...} file2.c f2() {... ...} file3.c 无#inclde命令 方法A 方法B

共11页,试读已结束,阅读完整版请下载
刷新页面下载完整文档
VIP每日下载上限内不扣除下载券和下载次数;
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
相关文档