-
一种好的宏定义习惯
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://aero.blogbus.com/logs/351028.html
今天,和一位网友Oasis谈了一些关于宏定义的一些问题,颇有所得。特录于此。起因是他看到open sourc中经常有这样的源码,感觉无法理解:#define swap(a,b) do {int tmp;tmp = (a);(a) = (b);(b) = tmp;}while(0)。总感觉这样的定义中的do-while有点蛇足的味道,感觉真的是没有什么必要。开始我也是这样觉得的,因为是while(0)嘛,总感觉不用do-while,只用{}也是可以解决问题的。后来我们经过测试得出这样的结论:用这个语句,完全是程序员追求严谨的性格决定的风格。因为如果这样定义宏,那么如上面的swap宏,就只能像函数一样使用,这样在句子后面跟上分号:swap(a,b);。而如果只用{}来定义的话,那么使用中加不加分号就都可以了,就会比较混乱而且不严谨。
如果使用{}的话,会在if else语句中加分号不好用。而且,强制加分号,表明了这个宏不可以当作操作数来使用。【添加于9月24日】
随机文章:
关于液体突沸的解释 2005-10-13windows xp下面的语言栏消失的问题 2005-02-28柯达LS633自动数码相机使用心得 2005-01-203天的摄影感悟 2005-01-18揭开保护模式的神迷面纱 2004-12-16
收藏到:Del.icio.us







