《预处理命令 》PPT课件.ppt
《《预处理命令 》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《预处理命令 》PPT课件.ppt(21页珍藏版)》请在三一办公上搜索。
1、第6.5章:预处理命令,学习的意义,C语言的一个重要特征是它的预处理功能。我们知道,一个高级语言源程序在计算机上运行,必须先用编译程序将其翻译为机器语言。编译包括词法分析、语法分析、代码生成、代码优化等步骤,有时在编译之前还要做某些预处理工作,如去掉注释,变换格式等。C语言允许在源程序中包含预处理命令,在正式编译之前(词法分析之前)系统先对这些命令进行“预处理”,然后整个源程序再进行通常的编译处理。从语法上讲,这些预处理命令不是C语言的一部分,但使用它们却扩展了C语言程序设计的环境,可以简化程序开发过程,提高程序的可读性,也更有利于移植和调试C语言程序。本章主要介绍宏定义、文件包括和条件编译等
2、预处理命令。,学习的意义,源程序生成执行文件的过程:,#include#define PI 3.14159void main()float r=4;printf(“s=%fn”,PI*r*r);,本章讨论之重点!,学习目标,学习内容,预处理命令简介宏定义 不带参数的宏定义 带参数的宏定义文件包括条件编译本章小结,掌握#include、#define、#if、#ifdef、#else、#ifndef和#endif等命令的用法;掌握宏定义和宏替换的一般方法;掌握包含文件的处理方法;了解条件编译的作用和实现方法。,6.5.1 预处理命令简介,预处理命令:C源程序中以#开头、以换行符结尾的行,种类:,
3、宏定义#define、#undef 文件包含#include 条件编译#if、#ifdef、#else、#elif、#endif等 其他#line、#error、#program等,本章主要讨论的内容!,格式:,“#”开头 占单独书写行 语句尾不加分号,6.5.2 宏定义,宏定义分为两种:不带参数的宏定义和带参数的宏定义。,1、不带参数的宏定义,一般形式,#define 标识符 单词串,指令名称,宏名,被定义代表后面的单词串,宏体,是宏的内容文本,可缺省,表示宏名定义过或取消宏体,功能,用指定标识符(宏名)代替字符序列(宏体),如#define YES 1#define NO 0#define
4、 PI 3.1415926#define OUT printf(“Hello,World”);,#define SIZE 10#define INT_STR%dvoid main()int aSIZE,i;for(i=0;i=0;i-)printf(INT_STR,ai);,void main()int a10,i;for(i=0;i=0;i-)printf(%d,ai);,注意:宏替换时仅仅是将源程序中与宏名相同的标识符替换成宏的内容文本,并不对宏的内容文本做任何处理。,宏定义注意事项,C程序员通常用大写字母来定义宏名,以便与变量名区别。,如:#define PI 3.14159,宏定义的位
5、置任意,但一般放在函数外面。,宏定义时,如果单词串太长,需要写多行,可以在行尾使用反斜线“”续行符,例如:#define LONG_STRING this is a very long string that isused as an example,宏名的作用域是从#define定义之后直到该宏定义所在文件结束,#undef可终止宏名作用域,#undef 标识符,宏定义可以嵌套定义,但不能递归定义,#define R 2.0#define PI 3.14159#define L 2*PI*R()#define S PI*R*R(),#define M M+10(),程序中字符串常量即双引号中
6、的字符,不作为宏进行宏替换操作,#define XYZ this is a test printf(XYZ);输出:XYZ,而不是:this is a test。,宏定义注意事项,宏定义一般以换行结束,不要用分号结束,以免引起不必要的错误,#define PI 3.14;a=PI*2*2;,a=3.14;*2*2;,错误!,宏可以被重复定义。,在定义宏时,如果宏是一个表达式,那么一定要将这个表达式用()括起来,否则可能会引起非预期的结果。,#define NUM1 10#define NUM2 20#define NUM NUM1+NUM2 void main()int a=2,b=3;a*=
7、NUM;b=b*NUM;printf(a=%d,b=%dn,a,b);,void main()int a=2,b=3;a*=10+20;b=b*10+20;printf(a=%d,b=%dn,a,b);,输出结果:a=60,b=50,输出结果:a=60,b=90,2、带参数的宏定义,一般形式,#define 标识符(参数列表)单词串,参数表由一个或多个参数构成,参数只有参数名,没有数据类型符,参数之间用逗号隔开,参数名必须是合法的标识符,通常会引用宏的参数,例:#define S(a,b)a*b.area=S(3,2);宏展开:area=3*2;,宏展开:形参用实参换,其它字符保留宏体及各形参
8、外一般应加括号(),不能加空格,例#define S(r)PI*r*r相当于定义了不带参宏S,代表字符串“(r)PI*r*r”,例#define POWER(x)x*x x=4;y=6;z=POWER(x+y);宏展开:z=x+y*x+y;一般写成:#define POWER(x)(x)*(x)宏展开:z=(x+y)*(x+y);,#define MAX(x,y)(x)(y)?(x):(y).void main()int a,b,c,d,t;.t=MAX(a+b,c+d);宏展开:t=(a+b)(c+d)?(a+b):(c+d);,int max(int x,int y)return(x y?
9、x:y);void main()int a,b,c,d,t;.t=max(a+b,c+d);,【例】用宏定义和函数实现同样的功能,带参的宏与函数区别,6.5.3 文件包含,处理过程,功能 一个源文件可将另一个源文件的内容全部包含进来,一般形式,#define 或#define“包含文件名”,预编译时,用被包含文件的内容取代该预处理命令,再对“包含”后的文件作一个源文件编译,:直接到系统指定的“文件包含目录”去查找被包含的文件,“”:系统首先到当前目录下查找被包含文件,如果没找到,再到系统指定的“文件包含目录”去查找。,文件包含举例:,#include head.h#include func.c
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 预处理命令 预处理命令 PPT课件 预处理 命令 PPT 课件
链接地址:https://www.31ppt.com/p-5620287.html