《C语言程序设计》课件第八章11.ppt
《《C语言程序设计》课件第八章11.ppt》由会员分享,可在线阅读,更多相关《《C语言程序设计》课件第八章11.ppt(22页珍藏版)》请在文字多文库上搜索。
1、6.7 编译预处理,宏定义 文件包含 条件编译,基本内容:,6.7.1宏定义,宏定义:是用一个指定的名字来代表一个常量表达式或字符串,其复杂形式是带参数的宏。,1.符号常量定义,(1)程序中常用到一些特别的量,如用0或1作条件判别 量,用-1表示文件结束,用2147483647表示最大4 字节整数231-1等,它们都常定义成宏名。如:#define NO 0#define YES 1#define EOF(-1)(2)宏名可定义为具有一定精度要求的float和double类 型值。如:#define PI 3.14159#define EPS 1.0e-9,(3)宏名还可以定义为数组中最后一个
2、元素的地址,利用宏定义将C写成PASCAL的格式,对于宏需要注意的问题:,(1)宏名习惯上用大写字母表示,表示与一般变量名相 区别。但这并非C语言的规定,也可以用小写字母。(2)宏定义不是C语句,不必在行末尾加分号。若加,则会连分号一些进行置换,可能会出现语法错误。(3)字符串或字符常量中若有与宏名重名的,预处理程 序一律不将它们作为宏名对待,更不进行代换。例如:#define YES 1 printf(“YESn”);输出的是YES,而不是1。,(4)在宏定义中,可以引用已经定义的宏名,可以进 行层层代换。例如:#define PI 3.14159#define R 3.0#define L
3、 2*PI*R#define S PI*R*R(5)宏定义的有效范围为定义点到该源文件结束,还可 以用#undef命令终止宏定义的作用域。例如:#define P 100 main()#undef P f1(),2.带参数的宏定义,所谓带参数的宏定义是指宏名后带有形参表的宏定义。格式:#define 宏名(形参表)表达式 说明:宏定义中的形参在以后的程序中将以实参替换。置换过程:在程序中若有带参数的宏,则按#define命令行中指定的字符串从左到右进行置换。如果串中包含宏中的形式参数,则将程序语句中相应的实参(可以是常量、变量或表达式)代替形参,如果宏定义中的字符串中的字符不是参数字符,则原样
4、保留。,常见的带参数宏定义的用法:,(1)带参数的宏定义常用来代替一些简短的表达式。例如:#define MIN(x,y)(xy)?x:y)(2)带参数的宏定义也可以直接引用已定义过的宏定 义,即实现宏定义的嵌套。例如:#define SQ(x)(x*x)#define FIFTH(x)CUBE(x)*(SQ(x)预处理程序对每个宏名展开代换,直到件中不再有宏名为止。,(3)带参数的宏定义可以简化格式打印函数printf的格 式,提高程序的可读性。例如:#define NL putchar(n)#define PR(for,val)printf(val=%fort,val)#define PR
5、INT1(f,x)PR(f,x);NL PRINT1(d,a+b)其宏展开为:PR(d,a+b);NL 又进一步展开为:printf(a+b=%dt,a+b);putchar(n),(1)在宏展开后容易引起误解的表达式,在宏定义时,应将表达式用圆括号括起来。例如:#define S(a,b)a+b 若调用 v=S(2,3)*4;时,经宏展开后为:v=2+3*4;所以,原想先计算2+3,则变成先计算3*4了,故应将宏定义中的表达式用圆括号括起来,即成为:#define S(a,b)(a+b)由此可见,除非有理由不要圆括号,否则,一般都应将宏定义中的表达式用圆括号括起来。,在使用带参数的宏定义时,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言程序设计 语言程序设计 课件 第八 11
