至强e3处理器怎么样:[收藏]C++ Tips(10)--宏的使用 - 心如止水--coofucoo的专栏
来源:百度文库 编辑:偶看新闻 时间:2024/05/03 22:50:11
[收藏]C++ Tips(10)--宏的使用
很多程序员不知道C中的“宏”到底是什么意思?特别是当宏有参数的时候,经常把宏和函数混淆。我想在这里我还是先讲讲“宏”,宏只是一种定义,他定义了一个语句块,当程序编译时,编译器首先要执行一个“替换”源程序的动作,把宏引用的地方替换成宏定义的语句块,就像文本文件替换一样。这个动作术语叫“宏的展开”。使用宏是比较“危险”的,因为你不知道宏展开后会是什么一个样子。例如下面这个宏:
#define MAX(a, b) a>b?a:b
当我们这样使用宏时,没有什么问题: MAX( num1, num2 ); 因为宏展开后变成 num1>num2?num1:num2;。 但是,如果是这样调用的,MAX( 17+32, 25+21); 呢,编译时出现错误,原因是,宏展开后变成:17+32>25+21?17+32:25+21,Woh,这是什么啊?
所以,宏在使用时,参数一定要加上括号,上述的那个例子改成如下所示就能解决问题了。
#define MAX( (a), (b) ) (a)>(b)?(a)b)
即使是这样,也不这个宏也还是有Bug,因为如果我这样调用 MAX(i++,j++); , 经过这个宏以后,i和j都被累加了两次,这绝不是我们想要的。所以,在宏的使用上还是要谨慎考虑,因为宏展开是的结果是很难让人预料的。而且虽然,宏的执行很快(因为没有函数调用的开销),但宏会让源代码澎涨,使目标文件尺寸变大,(如:一个50行的宏,程序中有1000个地方用到,宏展开后会很不得了),相反不能让程序执行得更快(因为执行文件变大,运行时系统换页频繁)。
因此,在决定是用函数,还是用宏时得要小心。
本文引用通告地址: http://blog.csdn.net/coofucoo/services/trackbacks/489027.aspx
[点击此处收藏本文] 发表于 2005年09月25日 12:59 AM
/*这一系列文章《C++ Tips》是公司Code Committee专家会推荐工程师看的,感觉很好,拿出来与大家共同提高。并不是知道多少会使人与人产生差别,真正的差别在于你能做到多少。
--coofucoo*/ 宏的使用很多程序员不知道C中的“宏”到底是什么意思?特别是当宏有参数的时候,经常把宏和函数混淆。我想在这里我还是先讲讲“宏”,宏只是一种定义,他定义了一个语句块,当程序编译时,编译器首先要执行一个“替换”源程序的动作,把宏引用的地方替换成宏定义的语句块,就像文本文件替换一样。这个动作术语叫“宏的展开”。使用宏是比较“危险”的,因为你不知道宏展开后会是什么一个样子。例如下面这个宏:
#define MAX(a, b) a>b?a:b
当我们这样使用宏时,没有什么问题: MAX( num1, num2 ); 因为宏展开后变成 num1>num2?num1:num2;。 但是,如果是这样调用的,MAX( 17+32, 25+21); 呢,编译时出现错误,原因是,宏展开后变成:17+32>25+21?17+32:25+21,Woh,这是什么啊?
所以,宏在使用时,参数一定要加上括号,上述的那个例子改成如下所示就能解决问题了。
#define MAX( (a), (b) ) (a)>(b)?(a)b)
即使是这样,也不这个宏也还是有Bug,因为如果我这样调用 MAX(i++,j++); , 经过这个宏以后,i和j都被累加了两次,这绝不是我们想要的。所以,在宏的使用上还是要谨慎考虑,因为宏展开是的结果是很难让人预料的。而且虽然,宏的执行很快(因为没有函数调用的开销),但宏会让源代码澎涨,使目标文件尺寸变大,(如:一个50行的宏,程序中有1000个地方用到,宏展开后会很不得了),相反不能让程序执行得更快(因为执行文件变大,运行时系统换页频繁)。
因此,在决定是用函数,还是用宏时得要小心。
本文引用通告地址: http://blog.csdn.net/coofucoo/services/trackbacks/489027.aspx
[点击此处收藏本文] 发表于 2005年09月25日 12:59 AM
QQ的tips区别
写三条你的health tips
求有关英语的learning tips
qq的好友资料tips问题
health tips是什么意思啊,请列出你的3条health tips
收藏文件夹在C盘的什么地方?怎么移动?
我的QQ怎么没有TIPS显示了?
我的QQ怎么没有TIPS资料显示了?
[作业]MIPS(Million Instructions Per Second), GIPS, TIPS的转换?
善于学习的人有那些方法?tips
拍随身听的广告有没有什么tips啊
请列出你的3条health tips
tips是什么意思
请问:IE"收藏"中的网页存放在C盘的哪个文件夹(windows xp)
我的qq里面的个人信息的tips怎么不会显示了?
跪求~谁有交响诗篇的ED3tip tap tips的MP3下载地址啊谢谢
在QQ里鼠标落到头像上出现的TIPS背景图片怎么更改
有谁最近到坝上草原玩过的没有?给点tips.从北京出发
我想知道Tips是什么意思?
这个70Tips是什么意思?
Qzone Tips是什么
about language tips是什么意思
Zippo打火机的收藏
收藏的拼写