




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、全国计算机等级考试2c课程第10讲预编译处理1全国计算机等级考试 2c课程2021-10-29全国计算机等级考试2c课程第10讲预编译处理2编译预处理命令的基本概念lansi c规定,可以在源程序中加入一些“编译预处理命令” ,以改进程序设计环境,提高编程效率。例如:l#define pi 3.14159l#include l虽然这些“编译预处理命令”也是由ansi c统一规定的,但它们并非c语言的组成部分。含有这种 “编译预处理命令”的源程序,只有在正式编译之前先对它们进行“预处理”后,才能被正常编译成“目标程序”。l语言提供的预处理命令主要有:宏定义命令、文件包含命令、条件编译命令。l为了
2、与一般语句相区别,这些编译预处理命令”都以 “”号开头。2021-10-29全国计算机等级考试2c课程第10讲预编译处理3不带参数的宏替换命令l不带参数的宏替换命令l一般形式:define 标识符 字符串l例如:define pi 3.1415926l其中“define”是宏定义命令, pi 称为“宏名”, “3.1415926”称为宏体。l作用是将程序中在该命令以后出现的所有的pi都用“3.1415926”代替。l在预编译时将宏名替换成字符串的过程称为“宏展开”。2021-10-29全国计算机等级考试2c课程第10讲预编译处理4不带参数的宏替换命令l说明:(1)define命令、宏名、宏体之
3、间必须用空格隔开;(2)由于宏定义不是c语言程序语句,行的末尾不需要加“;”号;如果加了分号则会作为宏体的一部分被一起置换。(3)宏名习惯上一般用大写字母表示,以便与普通变量名区别。但这并非语法规定,即用小写字母并不属于语法错误;(4)程序中被加上双引号“”的宏名,将不能被替换,如:printf(“pi”);语句中的pi不会被替换为3.1415926;(5)适当使用宏名代替一个字符串,可以减少程序中重复书写某些复杂数据的工作量。2021-10-29全国计算机等级考试2c课程第10讲预编译处理5不带参数的宏替换命令l例如: #include #define pi 3.1415926void ma
4、in() float l,s,r,v; printf(input radius:); scanf(%f,&r); l=2.0*pi*r; s=pi*r*r; v=4.0/3*pi*r*r*r; printf(l=%10.4fns=%10.4fnv=%10.4fn,l,s,v);运行情况如下:1=25.1328s=50.2655v=150.79662021-10-29全国计算机等级考试2c课程第10讲预编译处理6不带参数的宏替换命令(6) 宏定义是用宏名代替一个字符串,只作简单置换,并不对字符串(宏体)作正确性检查。(7) #define命令通常写在文件开头或函数之前。默认情况下,宏名的
5、有效范围,是从宏定义命令之后开始,直到本源文件结束。(8)当然,也可以用#undef命令,提前终止宏定义的作用范围。如:#define g 9.8 _void main() g的有效范围 _#undef g f1() 2021-10-29全国计算机等级考试2c课程第10讲预编译处理7不带参数的宏替换命令(9) 在进行宏定义时,可以引用已定义的宏名,宏展开时将会层层置换。例如: #include #define r 3.0#define pi 3.1415926#define l 2*pi*r#define s pi*r*rvoid main() printf(l=%fns=%fn,l,s);编
6、译预处理时:printf(“l=%fns=%fn”,l,s); 语句将被展开为printf(“l=%fns=%fn”,2*3.1415926*3.0,3.1415926*3.0*3.0);2021-10-29全国计算机等级考试2c课程第10讲预编译处理8带参数的宏定义l带参数的宏定义l作用:不只进行简单的字符串替换,还进行参数的替换。 l一般形式为:define 宏名(参数表)字符串 例如:#define s(a,b) a*b area=s(3,2);说明:程序中用和分别代替宏定义中的形式参数和b,用*代替s(3,2) 。因此赋值语句展开为:area=3*22021-10-29全国计算机等级考
7、试2c课程第10讲预编译处理9带参数的宏定义l对带参的宏定义是这样展开置换的:l对带实参的宏,如s(3,2),基本原则也是按define命令行中指定的字符串从左到右进行置换的。l但如果字符串中包含有宏名中定义的形参,如: “*”中的a和b,则要用程序中相应的实参(可以是常量、变量或表达式)来代替;其他字符,如“*”中的*号,则原样保留。图中s(3,2)将被置换为3*2,其中3和2是实参,将代替指定字符串a*b中的a和b,*不是参数,则被原样保留。2021-10-29全国计算机等级考试2c课程第10讲预编译处理10带参数的宏定义l例如: #include #define pi 3.1415926
8、#define s(r) pi*r*rvoid main() float a,area; a=3.6; area=s(a); printf(r=%fnarea=%fn,a,area);说明:赋值语句“area=s(a);” 展开后被替换为:area=3.1415926*;运行结果:r=3.600000area=40.7150382021-10-29全国计算机等级考试2c课程第10讲预编译处理11文件包含命令l所谓“文件包含”,是指一个源文件可以将另外一个源文件的全部内容包括进来。l语言提供了#include命令用来实现“文件包含”的操作。其一般形式为:#include 文件名 或 #inclu
9、de l说明:(1)在#include命令中,文件名可以用双撇号或尖括号括起来。(2)一个#include命令只能指定一个被包含文件,如果要包含个文件,要用个#include命令。2021-10-29全国计算机等级考试2c课程第10讲预编译处理12文件包含命令l说明:(3) 在一个被包含文件中又可以包含另一个被包含文件,即文件包含是可以嵌套的。如下图所示 #include a#include bccbc2021-10-29全国计算机等级考试2c课程第10讲预编译处理13小练习:1、以下叙述中错误的是 (2008年4月)a)在程序中凡是以“”开始的语句行都是预处理命令行 b)预处理命令行的最后不
10、能以分号表示结束 c)#define max是合法的宏定义命令行 d)c程序对预处理命令行的处理是在程序执行的过程中进行的 2021-10-29全国计算机等级考试2c课程第10讲预编译处理14小练习:2、有以下程序(2010年3月)#include #define sub(a) (a)-(a)main() int a=2,b=3,c=5,d;d=sub(a+b)*c;printf(%dn,d);程序运行后的输出结果是a)0b)-12c)-20d)102021-10-29全国计算机等级考试2c课程第10讲预编译处理15小练习:3、有以下程序(2009年9月)#include#define f(x
11、) x*x*xmain() int a=3,s,t; 3+1*3+1*3+1s=f(a+1); t=f(a+1);printf(%d,%d,s,t);程序运行后的输出结果是a)10,64 b)10,10 c)64,10d)64,642021-10-29全国计算机等级考试2c课程第10讲预编译处理16小练习:4、有以下程序#include #define pt 3.5;#define s(x) pt*x*x;mian() int a=1, b=2; printf(“%4.1fn”,s(a+b);3.5*1+2*1+2 程序运行后输出的结果是a)14.0 b)31.5 c)7.5 d)程序有错无输出结果2021-10-29全国计算机等级考试2c课程第10讲预编译处理17小练习:5、有一个名为init.txt的文件,内容如下:#define hdy(a,b) a/b#define print(y) printf(“y=%dn”,y) 有
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025高考生物备考教学设计:生物技术的安全性和伦理问题
- 篷房搭建合同范本
- 13 胡萝卜先生的长胡子 教学设计-2024-2025学年统编版语文三年级上册
- Unit 1 Teenage Life Listening and Speaking 教学设计 -2024-2025学年高中英语人教版2019 必修第一册
- 10《吃饭有讲究》第2课时(教学设计)-2024-2025学年统编版道德与法治一年级上册
- Module 7 Unit 2 I'll be home at seven o'clock. (教学设计)-2023-2024学年外研版(三起)英语五年级下册
- 11-1《过秦论》(教学设计)高二语文同步高效课堂(统编版 选择性必修中册)
- 7的乘法口诀(教学设计)-2024-2025学年二年级上册数学人教版
- 军训结束汇报表演上新生代表的演讲稿
- 公司推广策划合同范本
- 《鲁滨孙漂流记》讲解
- 《现代食品检测技术》全套教学课件
- payne效应的概念及其测试方法和应用
- 法学概论试题及答案
- 《西游记》电子版阅读-小学版
- 《室内照明设计》(熊杰)794-5 教案 第1节 光的性质及量度
- 《自相矛盾》说课课件
- 机械基础全册教案
- 颈肩腰腿痛的注射治疗课件整理-002
- 健身俱乐部经营和管理教学课件
- 电力公司备品备件管理制度
评论
0/150
提交评论