C语言课件07-Preprocessing.ppt_第1页
C语言课件07-Preprocessing.ppt_第2页
C语言课件07-Preprocessing.ppt_第3页
C语言课件07-Preprocessing.ppt_第4页
C语言课件07-Preprocessing.ppt_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

编译预处理,预处理与编译过程图,编译程序不能识别预处理命令!,源程序(含预处理命令),预处理器,源程序(不含预处理命令),编译器,目标代码,词法和语法分析、代码生成、优化等,按预处理命令对程序进行文本替换等处理,提纲,概述宏定义不带参数的宏带参数的宏取消宏定义文件包含练习,结束,概述,预处理功能是由一些预处理命令组成的,这些命令是在程序正常编译之前被执行。三种常用的预处理命令:宏定义命令条件编译命令文件包含命令预处理命令的特点:是在正常编译之前执行的。左边加一个#号,作为该命令的标志。不是语句,该命令结束不加分号。一般单独占一行。如写成多行,要加续行符()。,返回,不带参数的宏(1),作用:用一个指定的标识符来代表一个字符序列,也就是前面介绍的定义符号常量。形式:#define标识符字符序列标识符称为“宏名”,字符序列称为“替换文本”,上述形式称“宏定义”。在预处理过程中将宏定义之后的所有宏名逐一替换成相应的替换文本,这一过程称为“宏展开”或“宏替换”。宏名一般习惯用大写字母表示。使用宏可以提高程序的通用性。,不带参数的宏(2),宏定义并不为宏名分配内存空间。宏定义是用宏名代替一个字符序列,所以是作简单的置换,不作正确性检查。宏定义不是C语句,不必在行末加分号,宏定义以“回车”结束。在进行宏定义时,可以引用已定义的宏名,即允许嵌套使用宏。字符串和注释中与宏名相同的字符串不进行宏展开。,返回,带参数的宏(1),定义形式:#define宏名(参数表)字符序列调用形式:宏名(实参表)对带参数的宏进行宏展开的过程程序中宏定义之后出现的宏名将按#define命令行中指定的字符序列从左到右进行置换。字符序列中的宏形参,将以程序中对应的宏实参替代。示例#definePM(x,y)x*yinta=1,b=2,c;c=PM(a+b,a-b);,宏扩展的结果:c=a+b*a-b所以c的值为1,带参数的宏(2),带参数的宏使用过程中容易出现两种错误没有对宏字符序列中参数加括号,而出现表达式运算次序不符合意愿的结果在宏名和带参数的括弧之间多加了空格。例如:#defineS(r)PI*r*r宏和函数的区别函数调用先求出实参表达式值再带入形参;而带参数的宏则只进行单纯的文本替换。函数调用在程序运行时处理,分配临时内存单元;而带参数的宏则不会。函数中实参和形参之间类型要赋值相容;而宏不要求。使用宏的次数多时,宏展开后源程序长,但是运行时间短;使用函数的次数多时,效果恰好相反。,返回,取消宏定义,#define命令一般放在源文件的首部,宏名的有效范围是定义命令之后直到该源文件结束。可以使用#undef命令终止宏定义的作用域。形式:#undef宏名使用#undef的主要目的是把宏名局部化。,返回,文件包含,所谓文件包含指:一个源文件将另一个源文件的全部内容包含进来。两种形式#include#include文件名这两种形式的差别:使用不同的搜索路径第一种形式采用的搜索路径是C库函数头文件所在的目录第二种形式采用的搜索路径是:当前目录+C库函数头文件所在的目录经常用于包含头文件(.h)文件包含可以嵌套,即被包含文件中还可以包含其他文件。,返回,练习,下面程序执行FOR循环时,j的初值是_,终值是_,运行结果是_。#include#defineBOT(-2)#defineTOP(BOT+5)#definePRI(arg)printf(“%dn”,arg)#defineFOR(arg)for(;(arg);(arg)-)voidmain()inti=BOT,j=TOP;F

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论