C09编译预处理

C09编译预处理

ID:45303067

大小:195.00 KB

页数:20页

时间:2019-11-11

C09编译预处理_第1页
C09编译预处理_第2页
C09编译预处理_第3页
C09编译预处理_第4页
C09编译预处理_第5页
资源描述:

《C09编译预处理》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、第九章编译预处理教学目标了解编译预处理命令的作用;掌握不带参数的宏定义的作用及使用规则;了解带参数的宏定义的作用及使用规则;掌握文件包含的作用及用法;了解条件编译的作用及使用方式。基本要求能够熟练地阅读有关的应用程序,能够根据需要合理地使用编译预处理命令。7/25/20211长江大学计算机学院编译预处理简介凡是以“#”开头的行,都称为“编译预处理”命令行。如#define、#include就是编译预处理命令行。1.作用:对源程序编译之前做一些处理,生成扩展C源程序2.三种类型:宏定义#define文件包含#include条件编译

2、#if--#else--#endif等3.格式特点:“#”开头占单独书写行语句尾不加分号7/25/20212长江大学计算机学院如#defineYES1#defineNO0#definePI3.1415926#defineOUTprintf("Hello,World");9.1宏定义1.不带参数宏定义一般形式:#define宏名替换文本功能:用指定标识符(宏名)代替字符序列(替换文本)约定:用大写字母来命名替换文本可缺省,表示宏名定义过7/25/20213长江大学计算机学院(1)宏定义的定义位置:可在程序的任意位置。为了便于调试程

3、序,一般将宏定义写在函数的外面,并写在程序的开头,作用一直持续到源文件的末尾。(2)宏定义的作用域:从定义命令到文件结束,且不能重新定义,但可用#undef终止宏名的作用域。1.不带参数宏定义的相关说明1:例#defineYES1main(){……..}#undefYES#defineYES0max(){……..}原YES作用域新YES作用域7/25/20214长江大学计算机学院相关说明2:(3)用替换文本替换宏名时,不作语法检查。如#defineYES1#defineNO0……if(x==YES)printf("correct

4、!");elseif(x==NO)printf("error!");展开后:if(x==1)printf("correct!");elseif(x==0)printf("error!");又如#definePI3.14l5926printf("PI=%f",PI);……展开后:printf("PI=%f",3.14l5926);7/25/20215长江大学计算机学院相关说明3:(4)引号中的内容与宏名相同也不置换例#definePI3.14159printf("2*PI=%f",PI*2);宏展开:p

5、rintf("2*PI=%f",3.14159*2);例#defineMAXMAX+10()(5)宏定义可嵌套,不能递归例#defineWIDTH80#defineLENGTHWIDTH+40var=LENGTH*2;宏展开:var=80+40*2;(6)在宏定义中使用必要的括号()例#defineWIDTH80#defineLENGTHWIDTH+40var=LENGTH*2;宏展开:var=80+40*2;()()7/25/20216长江大学计算机学院例9.1不带参数的宏定义的使用#definePAI3.14159ma

6、in(){floatr,l,s,v;printf("inputradius:");scanf("%f",&r);l=2.0*PAI*r;s=PAI*r*r;v=4.0/3.0*PAI*r*r*r;printf("l=%10.4fs=%10.4fv=%10.4f",l,s,v);}经预编译处理以后,程序变为:main(){floatr,l,s,v;printf("inputradius:");scanf("%f",&r);l=2.0*3.14159*r;s=3.14159*r*r;v=4.0/3.0*3.141

7、59*r*r*r;printf("l=%10.4fs=%10.4fv=%10.4f",l,s,v);}程序运行结果为:inputradius:4↙l=25.1328s=50.2655v=268.08237/25/20217长江大学计算机学院(1)宏展开:形参用实参替换,其它字符保留不变。例#defineS(a,b)a*b………..area=S(3,2);宏展开:area=3*2;一般形式:#define宏名(参数表)替换文本2.带参数宏定义例#defineS(r)PI*r*r相当于定义了不带参宏S,代表字符串"(r)

8、PI*r*r"(2)宏名与括号之间号不能加空格7/25/20218长江大学计算机学院例#definePOWER(x)x*xx=4;y=6;z=POWER(x+y);宏展开后:z=x+y*x+y;/*与原意不合!*/(3)替换文本及各形参外一般应加括号()一般写成

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。