C语言程序设计第1章03.ppt

  1. 1、本文档共22页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C语言程序设计第1章03

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)宏名还可以定义为数组中最后一个元素的地址a[MAX-1]。如:#define MAX 100 #define MAXP a[MAX-1] (4)利用宏定义还可以把C语言语句的书写格式写成程 序员习惯的格式。如: 预处理后: #define then end {… #define begin { else if(ab) #define end ;} begin {a:=b; #define :== c:=b; d:=(a+b)/2; { ... D:=(d*c)/2; } if(ab)then end else begin … { c:=b; a:=b; } d:=(a+b)/2; d:=(a+b)/2; } … } 对于宏需要注意的问题: (1)宏名习惯上用大写字母表示,表示与一般变量名相 区别。但这并非C语言的规定,也可以用小写字母。 (2)宏定义不是C语句,不必在行末尾加分号。若加, 则会连分号一些进行置换,可能会出现语法错误。 (3)字符串或字符常量中若有与宏名重名的,预处理程 序一律不将它们作为宏名对待,更不进行代换。 例如: #define YES 1 … printf (“YES\n”); 输出的是YES,而不是1。 (4)在宏定义中,可以引用已经定义的宏名,可以进 行层层代换。例如: #define PI 3.14159 #define R 3.0 #define L 2*PI*R #define S PI*R*R (5)宏定义的有效范围为定义点到该源文件结束,还可 以用#undef命令终止宏定义的作用域。例如: #define P 100 main() {… } #undef P f1() … 2.带参数的宏定义 所谓带参数的宏定义是指宏名后带有形参表的宏定义。 格式:#define 宏名(形参表) 表达式 说明:宏定义中的形参在以后的程序中将以实参替换。 置换过程: 在程序中若有带参数的宏,则按#define命令行中指定 的字符串从左到右进行置换。如果串中包含宏中的形式 参数 ,则将程序语句中相应的实参(可以是常量、变量 或表达式)代替形参,如果宏定义中的字符串中的字符不 是参数字符,则原样保留。 常见的带参数宏定义的用法: (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,

文档评论(0)

qwd513620855 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档