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

安徽科技学院C语言程序设计课件第9章 编译预处理.ppt

安徽科技学院C语言程序设计课件第9章 编译预处理.ppt

  1. 1、本文档共17页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第9章 编译预处理 6.1 宏定义 6.2 文件包含 6.3 条件编译 C语言提供的预处理功能主要有三种: 宏定义 文件包含 条件编译 为了区别预处理命令和C语句、定义和说明语句,规定: 预处理命令行必须在一行的开头; 必须以#开始; 每行末尾不能加分号。 6.1 宏定义 不带参数的宏定义 不带参数的宏定义命令形式为: #define 宏名 字符串 或 #define 宏名 #define的作用是用指定的标识符(宏名)来代表字符串。其中#define是宏定义命令,宏名是一个标识符。 6.1 宏定义 【例6.1】 输入一个圆的半径,计算并输出圆的面积和周长 #define PI 3.14159 main( ) {float l,s,r; /*l:周长,s:面积,r:半径*/ printf(Please input radius: ); scanf(%f,r); /*输入半径*/ l=2.0*r*PI; /*计算周长*/ s=PI*r*r; /*计算面积*/ printf(l=%10.4f\ns=%10.4f\n,l,s); } 6.1 宏定义 说明: 为了与变量名区别,建议宏名一般用大写字母。使用宏名代替一个字符串,目的一是减少程序中某些重复使用字符串的书写量,其二是增加程序的可读性。在编译预处理过程中会进行宏展开。 当宏定义在一行中写不下,需要在下一行继续时,只需在最后一个字符后紧接一个反斜线“\”。注意在第二行开始不要有空格,否则空格会一起被替换。 例如: #define LEAP_YEAR year % 4==0\ year %100!=0 || year % 400==0 在C语言中,宏定义一般写在程序开头。宏名的有效范围为定义命令之后到本源文件结束,除非用#undef命令终止宏名的作用域。 对程序中用双引号括起来的字符串内的子串和用户标识符中的成分不做替换。例如已定义: 同一个宏名不能重复定义,除非两个宏定义命令行完全一致。 6.1 宏定义 带参数的宏定义 形参表中的不同形参之间用逗号隔开,字符串中包含形参表中的参数,带参数的宏定义命令形式为: #define 宏名(形参表) 字符串 【例6.2】分析下面程序的执行结果 #define M(x,y) (x*y) main( ) {int a=2,b=3,c=4,d=5; int x=M(a+b,c+d); printf(%d,x); } 程序运行结果为:19。宏替换结果为2+3*4+5。 6.1 宏定义 说明: 在调用带参数的宏名时,注意实参和形参一定要一一对应,个数相同,顺序一致。 和不带参数的宏定义相同,同一个宏名不能重复定义,除非两个宏定义完全相同。 带参数的宏定义时,注意字符串中的括号的使用。比较下列两个宏定义在替换后的不同: 其一 其二 宏定义: #define MU(x,y) x*y #define MU(x,y) (x)*(y) 宏调用: 6/MU(2+3,4+5) 6/MU(2+3,4+5) 结果: 6/2+3*4+5即3+3+4+5=15 6/(2+3)*(4+5)即6/5+9 其三 其四 宏定义: #define MU(x,y) (x*y) #define MU(x,y) ((x)*(y)) 宏调用: 6/MU(2+3,4+5) 6/MU(2+3,4+5) 结果: 6/(2+3*4+5)即6/19 6/((2+3)*(4+5))即6/45 6.1 宏定义 在宏调用中,实参不能替换括在双引号中的形参。 在进行宏定义时,可以引用已经定义过的宏名。 #define R 3.0 #define PI 3.14159 #define L 2.0*PI*R /*使用了已定义的宏名PI和R*/ #define S PI*R*R /*使用了已定义的宏名PI和R*/ 【例6.3】 #define PR(a) printf(%d\t,a) #define PRINT(a) PR(a);printf(ok!) /*使用已定义的宏名PR(a)*/ main( )

文档评论(0)

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

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

1亿VIP精品文档

相关文档