第7章 编译预处理

第7章 编译预处理

ID:12414034

大小:61.00 KB

页数:10页

时间:2018-07-16

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

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

1、第7章编译预处理“编译预处理”是指在C编译程序对C源程序进行编译之前,对预处理命令进行“预先”处理的过程。编译预处理由编译预处理程序完成。预处理命令(preprocessordirective)不是C语言组成部分,C语言的编译程序无法识别他们,如C程序中的“#include”,即是一个预处理命令,其功能是在将源程序编译成目标程序之前将文件“stdio.h”的内容替换该命令,然后由编译程序将源程序翻译成目标程序。C语言提供的编译预处理命令主要有以下三种:(1)宏定义。(2)文件包含。(3)条件编译。为了与一般的C语句相区别,编译预处理命令必须以“#”为首字符、

2、尾部不能加分号(C语句必须加分号),一行只能写一条编译预处理命令。编译预处理命令可以出现在源程序中的任何位置,其作用范围是从它出现的位置直到所在源程序文件的末尾。C的编译预处理功能为程序调试、移植提供了便利,正确使用编译预处理功能可以有效地提高程序的开发效率。7.1宏定义7.1.1不带参数的宏定义不带参数的宏定义命令形式为:#define宏名字符串其中:宏名为标识符。功能:在编译预处理时,将程序中在该命令后所有与宏名相同的文本用字符串置换。例如:#definePI3.1415926它的功能是在程序中用宏名“PI”来代替“3.1415926”这个字符串,在编译预处理时,将程序中

3、在该命令以后出现的所有的“PI”都用“3.1415926”代替。使用宏定义(macrodefinition),可以用一个简单的名字(宏名)来代替一个较长的字符串,以增加程序的可读性。-144-在编译预处理时将宏名替换成字符串的过程称为“宏展开”。关于宏定义和宏展开的说明:(1)宏名一般习惯用大写字母表示,以便与变量名相区别。但这并非规定,也可用小写字母。(2)一个宏名只能被定义一次,否则出错,被认为是重复定义。(3)在进行宏定义时,可以引用已定义的宏名,可以层层替换。见下面例7.1(4)对在字符串常量及用户标识符中与宏名相同的部分不作替换。例如已定义#defineL1234在

4、程序中有变量Length,其中L不作替换。同样在printf(“L=”,…)中的L不作替换。(5)宏定义的作用域:从定义开始到程序结束。(6)当宏定义在一行中写不下,换行时,需要在行尾加换行字符“”。下面的例子可以帮助我们理解以上说明:【例7.1】使用宏定义的例子。程序如下:#include#defineR3.0/*定义宏R*/#definePI3.1415926/*定义宏PI*/#defineL2*PI*R/*可使用已定义的宏名定义新的宏*/#defineSPI*R*Rvoidmain(){printf("L=%.2fS=%.2f",L,S);/

5、*对字符串常量中的的宏名L和S不作替换*/}运行结果如下:L=18.85S=28.27程序说明:经过宏展开后,printf函数中的输出项L被展开为2*3.1415926*3.0,S被展开为3.1415926*3.0*3.0,printf函数调用语句展开为printf(“L=%.2fS=%.2f”,2*3.1415926*3.0,3.1415926*3.0*3.0);7.1.2带参数的宏定义带参数的宏定义命令形式为:#define宏名(形参表)字符串形参表中的不同形参之间用逗号隔开,字符串中包含形参表中的参数。-144-在编译预处理时,将程序中该命令后所有与宏名相同的文

6、本用字符串置换,但置换时字符串中的形参要用相应的实参置换。例如:#defineM(a,b)a*barea=M(3,7);在宏展开时会替换成:area=3*7;也就是说由实参3替换了形参a,由实参7替换了形参b。【例7.2】分析下面程序的执行结果。程序如下:#include#defineM(x,y)(x*y)/*带参数的宏定义*/voidmain(){inta=2,b=3,c,d;c=M(a,b);/*宏展开后:c=(a*b)*/d=M(a+1,b+1);/*宏展开后:d=(a+1*b+1)*/printf("c=%d,d=%d",c,d);}程序运行结果

7、:c=6,d=6程序说明:带参数的宏展开只是简单的替换,没有计算功能,这一点与函数不同。在使用带参数的宏时,要注意括号的使用,请看下面的例子:(1)宏定义:#defineMU(x,y)x*y宏调用:6/MU(2+3,4+5)宏展开:6/2+3*4+5(2)宏定义:#defineMU(x,y)(x*y)宏调用:6/MU(2+3,4+5)宏展开:6/(2+3*4+5)(3)宏定义:#defineMU(x,y)(x)*(y)宏调用:6/MU(2+3,4+5)宏展开:6/(2+3)*(4+5)(4)宏定义:#d

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

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

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