第7章预处理命令-yhx.ppt

  1. 1、本文档共22页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第7章 预处理命令 本章学习重点 了解预处理命令的作用 掌握各种预处理命令 本章学习内容 7.1 预处理命令简介 7.2 宏定义 7.3 文件包括 7.4 条件编译 第7章 预处理命令 在前面各章中,已多次使用过以“#”号开头的预处理命令。如包含命令# include,宏定义命令# define等。 在源程序中这些命令都放在函数之外, 而且一般都放在源文件的前面,它们称为预处理部分。 7.1 预处理命令简介 (1) 宏定义命令 #define #undef (2) 文件包含命令 #include (3) 条件编译命令 #if #ifdef #else #elif #endif 7.2 宏定义 宏:在C语言源程序中允许用一个标识符来表示一个字符串, 称为“宏”。 宏名:被定义为“宏”的标识符称为“宏名”。 宏代换:在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换, 这称为“宏代换”或“宏展开”。 宏定义是由源程序中的宏定义命令完成的。 宏代换是由预处理程序自动完成的。在C语言中,“宏”分为有参数和无参数两种。 7.2.1 不带参数的宏定义 #define 标识符 字符串 1.其中的“#”表示这是一条预处理命令。凡是以“#”开头的均为预处理命令。“define”为宏定义命令。 2. “标识符”为所定义的宏名,习惯上宏名用大写字母表示,以便于与变量区别。但也允许用小写字母。 3. “字符串”可以是常数、表达式、格式串等,宏定义时用宏名来表示一个字符串,在宏展开时又以该字符串取代宏名 例如: 1. #define PI 3.1415926 它的作用是指定用标识符“PI”来代替“3.1415926”这个字符串,在编译预处理时,把程序中在该宏定义之后的所有标识符“PI”都用“3.1415926”来代替。 2. 当宏比较长,在一行写不下时,可在行尾加上反斜杠符号“\”表示下一行是这一行的继续,如: #define MESSAGE “the length of this message \ is very long.” 3. 此外,常对程序中反复使用的表达式进行宏定义。例如: # define M (y*y+3*y) 说明: 1.宏定义不是说明或语句,在行末不必加分号,如加上分号则连分号也一起置换。 例如:#define M (y*y+3*y); 表达式s= 3*M+4*M+5*M经过宏展开后,该语句为: s=3*(y*y+3*y);+4*(y*y+3*y);+5*(y*y+3*y); 编译的时候显然会出现语言错误。 2.宏定义必须写在函数之外,其作用域为宏定义命令起到源程序结束。如要终止其作用域可使用# undef命令 . 3.宏名在源程序中若用引号括起来,则预处理程序不对其作宏代换。 #define OK 100 printf(“OK”); 4.宏定义允许嵌套 ,如: #define PI 3.1415926 #define S PI*y*y 5.使用宏可以使程序易于修改,比如 : #define SIZE 10 int a[SIZE]; 6.可用宏定义表示数据类型,使书写方便。例如: #define STU struct student 7.对“输出格式”作宏定义,可以减少书写麻烦。 #define P printf #define D %d\n #define F %f\n main() { int a=4; float b=5.9; P(D F,a,b); } 7.2.2 带参数的宏定义 #define 宏名(形参表) 字符串 对带参数的宏,在调用中,不仅要宏展开, 而且要用实参去代换形参。 例如: #define M(y) y*y+3*y /*宏定义*/ k=M(5); /*宏调用*/ 在宏调用时,用实参5去代替形参y,经预处理宏展开后的语句为: k=5*5+3*5; 说明: 1.带参宏定义中,宏名和形参表之间不能有空格出现。 例如把:#define MAX(a,b) (ab)?a:b 写为:#define MAX (a,b) (ab)?a:b 将被认为是无参宏定义 宏展开时,宏调用语句: max=MAX(x,y);将变为: max=(a,b)(ab)?a:b(x,y);这显然是错误的。 2. 在带参宏定义中,形式参数不分配内存单元,因此不必作类型定义。 3. 在宏定义中的形参是标识符,而宏调用中的实参可以是表达式,如: #define SQ(y) (y)*(y) sq=SQ(a+1); 4. 在宏定义中,字符串内的形参通常要用括号括起来以避免出错。 如: #define SQ(y) y*y

文档评论(0)

好文精选 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档