网站大量收购独家精品文档,联系QQ:2885784924

《C语言程序设计》课件-第5章 编译预处理.pptx

《C语言程序设计》课件-第5章 编译预处理.pptx

  1. 1、本文档共36页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
;一、什么是编译预处理 编译预处理是指,在进行编译之前,先对源程序中的编译预处理命令进行处理;然后再将处理的结果,和源程序一起进行编译,以得到目标代码。;一、不带参数宏定义 一般形式: # define 宏名 [字符串] 字符串表示宏名,可缺省,定义过或取消宏体。 功能:用指定标识符(宏名)代替字符序列(宏体) 如:# define YES 1 # define NO 0 # define PI 3.1415926 # define OUT printf(Hello,World); 定义位置:任意 (一般在函数外面);作用域:从定义命令到文件结束; 可终止作用域,格式: # undef 宏名 例:# define YES 1 main() { …… } # undef YES …… # define YES 0 max() { …… } ;宏展开 预编译时,用宏体替换宏名 如:# define YES 1 # define NO 0 …… if (x==YES) printf(correct!); else if ( x==NO) printf(error!); 引号中的内容不置换 如:# define P 3.1 printf(2*P=%f,2*P);;注意 宏定义不能递归 如:# define MAX MAX+10 (?) 宏定义可嵌套 如:# define WIDTH 80 define LENGTH WIDTH+40 var=LENGTH*2; 宏定义中使用必要的括号“( )” 如:上例宏展开:(若是求长方形周长就错了) var = 80 + 40 * 2;;例 1* 给出下面宏替换的结果 # define R 5.0 # define FORMAT Area=%f\n # define PI 3.14 # define AREA R*R*PI # define PR printf main() { PR(FORMAT, AREA); PR(FORMAT); } ; 二、 带参数宏定义 转下一部分 一般形式: # define 宏名(参数表) 宏体 宏展开:形参用实参换,其它字符保留 例:# define S( a, b ) a * b …… area = S( 3, 2 ); 宏展开: area = 3 * 2; 宏名与左圆括号之间不能留有空格 例:# define S?(r) PI*r*r 相当于定义了不带参宏 S, 代表字符串 (r) PI*r*r;宏体及各形参外一般应加括号 ( ) 例: # define POWER(x) x*x x = 4; y = 6; z = POWER( x + y ); 宏展开:z = x + y*x+y; // 不是所要的结果 一般写成: # define POWER(x) ((x)*(x)) 宏展开:z=((x+y)*(x+y));;例 2* 用带参数宏定义求两个数的最大值 # define MAX(x, y) (x)(y)?(x):(y) # include stdio.h main() { int a, b, c; float x, y, z; scanf(%d%d, a,b); c = MAX(a,b); scanf(%f%f, x,y); z = MAX(x, y); printf(c=%d z=%f \n, c, z); };带参的宏与函数区别 ;三、在定义和使用宏调用时应注意的问题 1. 参数多次计算 如定义:# define min(A, B) ((A)(B)?(A):(B)) 调用1: z = min(x+y,x*y); 展开: z= ((x+y)(x*y)?(x+y):(x*y)); 调用2: z = min( n++ ,m++); 展开:z= ((n++ )(m++)?(n++ ):(m

文档评论(0)

卖报的小行家 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档