第八章编译预处理.docx
《第八章编译预处理.docx》由会员分享,可在线阅读,更多相关《第八章编译预处理.docx(5页珍藏版)》请在优知文库上搜索。
1、第八章编译预处理第一节宏定义大家好,上一节咱们讲的是“变量的存储和引用,内部和外部函数”我们主要是围绕着下列话题进行讲解:(1)变量的存储类别(2)局部变量的存储方式(3)全局变量跨文件引用(4)函数的跨文件调用(5)StatiC关键字用法总结:本节是新的一章的第一节,我们围绕如下话题来讲解:(1)不带参数的宏定义(2)带参数的宏定义大家回忆一下老师以往讲解的内容:一个项目,可以由一个或者多个源文件组成,一个项目,咱们可以通过编译、链接最终形成一个可执行文件。那么这个编译,是一个一个的源文件也就是这里的.cpp文件单位进行的,每个源文件,都会编译成一个目标文件(.。也可能是obj,这个跟操作系
2、统有关),那如果源文件有几个,则可能就编译生成了几个目标文件,然后将这些目标文件进行链接,形成最终的一个一个的可执行文件。那么这个编译都干了什么事,笼统的说:词法,语法分析,目标代码生成,优化之类的一些东西。这个编译我们可以拆开来看它也是干了好几个事的,一般来讲他会干这么几个事:a)预处理:b)编译:词法,语法分析,目标代码生成,优化c)汇编:产生.0(.obj)目标文件;大家也不用深究这几个词是啥意思。老师本节课重点要说这个“预处理”,这个预处理是干什么的呢?咱们在源程序.cpp中加入一些特殊的代码(特殊命令),这些特殊代码有一些特殊能力,提供一些特殊功能,编译系统会先对这些特殊代码做处理,
3、这个就叫“预处理”,处理的结果再和源程序代码一起进行上边步骤b)的编译,汇编这一系列操作。C语言一般提供三种预处理功能,1:宏定义,2:文件包含,3:条件编译,我们本节课讲解“宏定义”;这三种功能也是通过在程序代码中写代码来实现,只不过这些代码比较特殊,都是用#开头。一:不带参数的宏定义;不带参数的宏定义是用来干嘛的呢?用一个指定的标识符来代表一个字符串,一般形式:#define标识符字符串标识符也叫宏名比如:#definePl3.作用:用Pl来代替“3.”这个字符串,程序源码中,我们写的是Pl(也就是一般形式中的标识符),在编译预处理时,所有在该#加由优之后的Pl都会被替换成“3.”;好处:
4、a)用一个简单的名字代替一个长字符串,所以这个标识符也被称为宏名。在预编译时将宏名替换成字符串的过程称为“宏展开二#define就是宏定义命令;b)增加了修改的方便性,为修改提供极大便利,这种能力被用的很频繁,如果Pl不等于3.14了,而是等于2.58了,是不是我只需要修改一行,整个程序就都等于被替换成成2.58了;这也叫提高了程序的可移植性;演示:#definePl3.intmain()(floatftmp;ftmp=2*PI;printf(ftmp=%fr,ftmp);)说明:实际上宏展开时,Pl就直接被替换成了3并不做语法检杳,所以替换完了后直接参与乘法运算,也就是ftmp=2*Pl;就
5、#1当于ftmp=2*3.;说明:(1)宏名一般大写字母表示,这是一种习惯,建议大家遵照这个习惯。(2)宏定义不是C语句,不必在行末加分号,如果加分号则连分号一起被替换了;#definePl3.;ftmp=2*Pl;这还好,不报错,这相当于ftmp=2*3.;ftmp=Pl*2;这就报语法错了。这相当于ftmp=3.;*2;(3)Vdefine命令出现在程序中函数的外面,宏名的有效范围是#define之后到本源文件结束,不能跨文件使用,如果在另外一个文件中使用,则需要在另外一个文件中也做相同定义,或者把这些定义放到一个公共文件里,并用下节课我们要讲解的#访(把这个公共文件包含到每个源文件中去;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第八 编译 预处理
