带参数的宏定义#define

带参数的宏定义#define

ID:9016865

大小:33.50 KB

页数:2页

时间:2018-04-15

带参数的宏定义#define_第1页
带参数的宏定义#define_第2页
资源描述:

《带参数的宏定义#define》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、9.1.2带参数的宏定义  带参数的宏定义的一般形式如下:  #define<宏名>(<参数表>)<宏体>  其中,<宏名>是一个标识符,<参数表>中的参数可以是一个,也可以是多个,视具体情况而定,当有多个参数的时候,每个参数之间用逗号分隔。<宏体>是被替换用的字符串,宏体中的字符串是由参数表中的各个参数组成的表达式。例如:  #defineSUB(a,b)a-b如果在程序中出现如下语句:  result=SUB(2,3)则被替换为:  result=2-3;如果程序中出现如下语句:  result=SUB(x+1,y+2);则被替换为:  res

2、ult=x+1-y+2;  在这样的宏替换过程中,其实只是将参数表中的参数代入到宏体的表达式中去,上述例子中,即是将表达式中的a和b分别用2和3代入。  我们可以发现:带参的宏定义与函数类似。如果我们把宏定义时出现的参数视为形参,而在程序中引用宏定义时出现的参数视为实参。那么上例中的a和b就是形参,而2和3以及x+1和y+2都为实参。在宏替换时,就是用实参来替换<宏体>中的形参。下面是带参数的宏定义的例子:例9-4 #include#defineSUB(a,b)a-bvoidmain(){ intx,y,result; x=

3、2; y=3; result=SUB(x+2,y-1); cout<<"result="<

4、参替换形参。而在函数中,形参和实参是完全独立的变量,它们均有自己的作用域。当调用发生时,实参传递给形参的过程(值传递或引用传递)完全不同于简单的宏替换。  (2)在宏定义中的形参是标识符,而宏调用中的实参可以是表达式。如:例9-5 #include#defineSQ(y)(y)*(y)voidmain(){ intx,result; cout<<"inputanumber:"<>x; sq=SQ(x+1); cout<<"result="<

5、)(y)*(y)"一行为宏定义,形参为y。程序中宏调用时实参为x+1,是一个表达式,在宏展开时,用x+1代换y,再用(y)*(y)代换SQ,得到如下语句:"result=(a+1)*(a+1);",这与函数的调用是不同的,函数调用时要把实参表达式的值求出来再赋予形参。而宏代换中,对实参表达式不作计算直接地照原样替换。

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

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

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