第8章编译预处理.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
辽宁石油化工大学计算机基础教学系 辽宁石油化工大学计算机基础教学系 辽宁石油化工大学计算机基础教学系 辽宁石油化工大学计算机基础教学系 辽宁石油化工大学计算机基础教学系 辽宁石油化工大学计算机基础教学系 辽宁石油化工大学计算机基础教学系 辽宁石油化工大学计算机基础教学系 辽宁石油化工大学计算机基础教学系 辽宁石油化工大学计算机基础教学系 辽宁石油化工大学计算机基础教学系 辽宁石油化工大学计算机基础教学系 * 第8章 编译预处理及带参数的main函数 8.1宏定义 8.2文件包含 8.3条件编译 8.4 main函数的参数 辽宁石油化工大学计算机基础教学系 * 8.1宏定义 宏定义是指用一个标识符来表示一个字符串,标识符称为宏名。在编译预处理时,把程序文件中在该宏定义之后出现的所有宏名,都用宏定义中的字符串去代换,这个过程称为宏替换。 在C语言中,宏分为有参数和无参数两种。 8.1.1无参宏定义 所谓无参宏就是宏名后不带任何参数。其定义的一般形式为: #define 标识符 字符串 由“#”开始的命令是C预处理命令。 “define”为宏定义命令。“标识符”为所定义的宏名。“字符串”可以是常数、表达式、格式串等。 辽宁石油化工大学计算机基础教学系 * 在前面已经介绍过的符号常量的定义就是一种无参宏定义,例如: #define PI 3.1415926 此外,对程序中反复使用的表达式进行宏定义,给程序的书写将带来很大的方便,例如: #define N (2*a+2*a*a) 在编写源程序时,所有的(2*a+2*a*a)都可由N代替,而对源程序作编译时,将先由预处理程序进行宏替换,即用(2*a+2*a*a)表达式去置换所有的宏名N,然后再进行编译。 辽宁石油化工大学计算机基础教学系 * 【例8.1】 #define N (2*a+2*a*a) main() { int s,a; scanf(%d,a); s=N+N*N; printf(s=%d\n,s); } ? 上例程序中首先进行宏定义,定义N来替代表达式(2*a+2*a*a),在s= N+N*N中作了宏调用。在预处理时经宏展开后该语句变为: s=(2*a+2*a*a)+ (2*a+2*a*a)* (2*a+2*a*a) 注意:在宏定义中表达式(2*a+2*a*a)两边的括号不能少。 辽宁石油化工大学计算机基础教学系 * 对于宏定义还要说明以下几点: 宏名的前后应有空格,以便准确地辨认宏名,如果没有留空格,则程序运行结果会出错。 宏定义是用宏名来表示一个字符串,只是一种简单的替换,字符串中可以含任何字符,可以是常数,也可以是表达式,预处理程序对它不作任何检查。如有错误只能在编译已被宏展开后的源程序时发现。 习惯上宏名用大写字母表示,以便于与变量区别。但也允许用小写字母。 宏定义不是语句,在行末不必加分号,如加上分号则连分号也一起置换。 宏定义必须写在函数之外,有效范围为宏定义命令起到源程序结束。 辽宁石油化工大学计算机基础教学系 * 可以使用#undef命令终止宏定义的作用域。 【例8.2】 #define M 10 main() { …… } #undef M f1() { …… } 宏名在源程序中若用引号括起来,则预处理程序不对其作宏代换。 【例8.3】 #define L 80 main() { printf(“L”); printf(\n); } M在main函数中有效,在f1中无效。 宏名L在printf语句中用引号标示,因此不作宏代换。程序的运行结果为:L表示把“L”当字符处理。 辽宁石油化工大学计算机基础教学系 * 在进行宏定义时,可以使用已经定义的宏名。在宏展开时由预处理程序层层代换。 例如: #define PI 3.1415926 #define S PI*r*r /* PI是已定义的宏名*/ 对语句: printf(%f,S); 在宏代换后变为: printf(%f,3.1415926*r*r); 对“输出格式”作宏定义,可以减少书写麻烦。 辽宁石油化工大学计算机基础教学系 * 【例8.4】 #define P printf #define D %d\n #define F %f\n main(){ int a=5, c=8, e=11; float b=3.8, d=9.7, f=21.08; P(D F,a,b); P(D F,c,d); P(D F,e,f); } 8.1.2带参宏定义

文档评论(0)

junjun37473 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档