第13章c编译预处理

第13章c编译预处理

ID:42716951

大小:235.00 KB

页数:19页

时间:2019-09-21

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

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

1、第13章编译预处理和动态存储分配源文件*.c运行文件*.exe编译编译编译目标文件*.obj连接编译连接连接编译预处理编译编译预处理包括:宏定义文件包含条件编译注:在C语言中,凡是以“#”号开头的行,都称为“编译预处理”命令行。如:#include、#define。13.1编译预处理作用:对源程序编译之前做一些处理,生成扩展C源程序种类宏定义#define文件包含#include条件编译#if--#else--#endif等格式:“#”开头占单独行语句尾不加分号作用范围可由定义处开始,直到文件末尾13.1.1宏替换不带参数宏定义一般形式:#define宏名字符序列功能:用指定标识符

2、(宏名)代替字符序列(字符串)宏展开:预编译时,用字符串替换宏名---不作语法检查如#defineYES1#defineNO0#definePI3.1415926#defineOUTprintf(“Hello,World”);定义位置:一般在文件开头,函数之前作用域:从定义命令到文件结束#undef可终止宏名作用域格式:#undef宏名例#defineYES1main(){……..}#undefYES#defineYES0max(){……..}YES原作用域YES新作用域宏定义可嵌套调用,不能递归调用例#defineMAXMAX+10()引号中的内容或用户标识符与宏名相同不置换例

3、#definePI3.14159printf(“2*PI=%f”,PI*2);宏展开:printf(“2*PI=%f”,3.14159*2);宏定义中使用必要的括号()例#defineWIDTH80#defineLENGTHWIDTH+40var=LENGTH*2;宏展开:var=80+40*2;()()例#defineWIDTH80#defineLENGTHWIDTH+40var=LENGTH*2;宏展开:var=80+40*2;如if(x==YES)printf(“correct!”);elseif(x==NO)printf(“error!”);展开后:if(x

4、==1)printf(“correct!”);elseif(x==0)printf(“error!”);带参数宏定义一般形式:#define宏名(参数表)字符序列例#defineS(r)PI*r*r相当于定义了不带参宏S,代表字符串“(r)PI*r*r”宏展开:形参用实参换,其它字符保留例#defineS(a,b)a*b………..area=S(3,2);宏展开:area=3*2;不能加空格例#definePOWER(x)x*xx=4;y=6;z=POWER(x+y);宏展开:z=x+y*x+y;一般写成:#definePOWER(x)((x)*(x))宏展开:z=((x+y

5、)*(x+y));字符串及各形参外一般应加括号()#defineMAX(x,y)(x)>(y)?(x):(y)…….main(){inta,b,c,d,t;…….t=MAX(a+b,c+d);……}宏展开:t=(a+b)>(c+d)?(a+b):(c+d);intmax(intx,inty){return(x>y?x:y);}main(){inta,b,c,d,t;…….t=max(a+b,c+d);………}例用宏定义和函数实现同样的功能【例】分析下面程序运行后的输出结果。#defineMA(x)x*(x-1)main(){inta=1,b=2;printf("%d",MA(1

6、+a+b));}分两次替换:①MA(1+a+b)用x*(x-1)替换。②用1+a+b替换x。printf语句被展开为:printf("%d",1+a+b*(1+a+b-1));程序输出结果:8带参的宏与函数区别带参宏函数处理过程不分配内存简单的字符置换分配内存先求实参值,再代入形参处理时间编译时程序运行时参数类型无类型问题定义实参,形参类型程序长度变长不变运行速度不占运行时间调用和返回占时间13.1.2文件包含功能:一个源文件可将另一个源文件的内容全部包含进来一般形式:#include“文件名”或#include<文件名>#include“file2.c”file1.cfile

7、2.cfile1.cfile2.cABA处理过程:预编译时,用被包含文件的内容取代该预处理命令,再对“包含”后的文件作一个源文件编译<>直接按标准目录搜索“”先在当前目录搜索,再搜索标准目录可指定路径文件包含可嵌套#include“file2.c”file1.cAfile3.cC#include“file3.c”file2.cBfile1.cAfile3.cfile2.c例文件包含举例/*powers.h*/#definesqr(x)((x)*(x))#definec

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

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

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