C C++语言程序的设计第7章 编译预处理.ppt

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

第七章 编译预处理 C/C++语言程序设计 龚尚福,贾澎涛主编 《C/C++语言程序设计》 西安电子科技大学出版社 第7章 编译预处理 * 7.1 宏定义 7.2 文件包含 7.3 条件编译 7.4小结 * 编译预处理(续) C语言对源程序在正常编译(包括词法分析、语法分析、代码生成和代码优化)之前先执行源程序中的预处理命令。预处理后,源程序再被正常编译,以得到目标代码(OBJ文件)。 * 编译预处理(续) 编译预处理命令不属于C语言语句的范畴,所使用的命令单词也不是C语言的保留字,在程序中书写时后边不加语句结束符“;”,但是前边要加一个符号“#”。 在C语言源程序中,凡是前边加有“#”号的行都是预处理命令。如果一行书写不下,可用反斜线“\”和回车键来结束本行,然后在下一行继续书写。 7.1 宏定义 用一个标识符来表示一个字符串,称为“宏”。 被定义为“宏”的标识符称为“宏名”。 在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换,称为“宏代换”或“宏展开”。 宏定义是由源程序中的宏定义命令完成的。宏代换是由预处理程序自动完成的。 C语言中,“宏”分为有参宏和无参宏两种。 * * 无参宏的宏名后不带参数。命令的一般格式: 7.1.1 无参宏 7.1 宏定义(续) “标识符”为所定义的宏名,它的写法同标识符,也叫符号常量,一般用大写字母表示。 “字符串”用来表示标识符被定义的内容,它通常是常数、表达式、格式串等。 #define 标识符 字符串 * 无参宏 例如: 替 换 3.14 3.14 #define PI 3.14 main() { float r,s,c; scanf(“%f”,&r); s = r * r * PI; c = 2 * r * PI; printf(“s=%f, c=%f”,s,c); } 7.1 宏定义(续) 说明: (1)在使用宏定义命令定义符号常量时,通常宏名使用大写字母,以便与变量区别。这是一种习惯,当然宏名用小写字母也不会出现语法错误。 (2)预处理程序对符号常量的处理只是进行简单的替换工作,不作语法检查,如果程序中使用的预处理语句有错,只能在正式的编译阶段检查出来。 * 7.1 宏定义(续) (3)宏定义不是语句,在行末不必加分号,如加上分号则连分号也一起置换。 (4)宏定义可以嵌套,即就是在一个宏定义命令中可以使用已被定义的宏名作为其字符串。宏替换时就要从后向前逐层替换。例如: #define WIDTH 2 #define LENGTH (WIDTH+3) #define AREA (LENGTH*WIDTH) * 7.1 宏定义(续) (5)对于加有双引号的字符串中出现的宏名不进行替换。例如: #define TWO 2*n … int n=8; printf("TWO=%d\n",TWO); … 运行该程序后,输出结果为: TWO=16 * 7.1 宏定义(续) (6)宏名的作用域为定义该宏名的文件,即宏名的作用域是文件级的,从定义时起到文件结束为止。如果有终止宏名命令,则其作用域到终止宏名命令为止。终止宏名命令的格式为: (7)宏定义时必须注意字符串部分的书写,保证在宏代换之后与原题意相符。例如: #define M (y*y+3*y) * #undef 标识符 * 命令的一般形式: 7.1.2 带参宏定义 在宏定义中的参数称为形参,在宏调用中的参数称为实参。 “宏名”同标识符,习惯采用大写字母; “形参表”由一个或多个参数组成,多个参数之间用逗号分隔,说明参数时不加类型说明; “字符串”中包含了“形参表”中所指定的参数,它可以由若干条语句组成。 例如:#define MAX(X,Y) ((X)>(Y)?(X):(Y)) 7.1 宏定义(续) #define 宏名(形参表) 字符串 * 带参宏调用的一般形式为: 7.1.2 带参宏定义 带参数的宏定义命令进行宏替换时,不是简单地用“字符串”来替换“宏名”,而是使用“实参”来代换“形参”,其余部分保持不变。 7.1 宏定义(续) 宏名(实参表) 7.1 宏定义(续) 说明: (1)带参宏定义中,宏名和形参表之间不能有空格出现,否则将空格符后边的内容都作为字符串,成为不带参数的宏定义语句了。例如: #define ADD (x,y) (x)+(y) (2)宏代换中的实参一般常为常量、变量或表达式。在宏展开后容易引起误解的表达式,在宏定义时,应将表达式用圆括号括起来,形式参数两

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档