关于函数式宏定义的学习

题记:回头看看原本学过的知识,发现那些原本以为理解了的皮毛都突然让自己变得陌生。逐步学习,不懈努力。

 

测试题目时发现得出的结论与自己给出的不同,于是查阅资料,重新学习宏定义相关的文章。在C与C++编程中宏定义命令经常使用,不过常作为常量,而函数式则用的比较少。做题时以普通的函数理解方式进行解答,发现错误后及时更正,也提醒自己学习要扎实。

题目如下:#defineMAX(a,b)?a:bint test(){int a=3,b=2;return MAX(--a,b+++1);}请给出函数运行返回值。

这里要注意的是:若函数参数为表达式,则普通函数的调用与函数式宏定义的替换过程是不一样的。普通函数调用时为先求出实参表达式的值再传给形参,如果有++,--等操作只需要执行一次,而宏定义函数中则需要展开,如上题中MAX(--a,b+++1)在宏定义函数中的展开式为:result= (--a>b+++1)?--a:b+++1;执行次数未必为一次。以下为测试代码:


#define MAX(a,b) ((a>b)?a:b)
#include <iostream>

using namespace std;

/*
MAX(--a,b+++1)的展开式为:    k=(--a>b+++1)?--a:b+++1;
执行时直接由b+++1 (3)(运算后b++变为3)    跳转至 b+++1    (变为4)(运算后b++ 变为4)
--a 只执行一次

若为 MAX(--a,++b+1); ++b+1(3) ==> ++b+1 (5) 
*/
int Test1()
{
int a=3,b=2;
int k= MAX(--a,b+++1);

cout<<"a= "<<a <<" b= "<<b<<endl;
return k;
}

int Test2()
{
int a=3,b=2;
int k= MAX(--a,++b+1);

cout<<"a= "<<a <<" b= "<<b<<endl;
return k;
}
int main()
{
int result1,result2;
result1 = Test1();
result2 = Test2();
cout<<"Test1 :"<<result1 << " Test2 :"<<result2<<endl;

return 0;
}

 

 

参考:http://www.cnblogs.com/dong008259/archive/2011/12/27/2302625.html

转载于:https://www.cnblogs.com/ace-code/archive/2012/10/05/2712067.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值