<script type="text/javascript">var stattitle='【推荐】由linux中的一个宏定义引发的思考';</script> 有时候会在linux的程序中看到这样的宏定义:#define wait_event(wq,condition)/do{/if(condition)/break;/_wait_event(wq,condition);/}while(0)这里到底是在做什么呢?这个循环不是只作一次么?假设定义了这样的一个宏:#define macro(condition)/if(condition) dosomething();在这样的情况下使用这个宏:if(temp) macro(i);else doanotherting();那么这样的话展开成是这样的:if(temp) if(i) dosomething();else doanotherthing();这样的话问题就出现了,else与第二句匹配了。 这样的宏定义是有测效的,上面的那种用空循环的方法是种解决的途径。因为一般的编译器对这种无用的循环都进行优化。个人觉得如果我们在if(condition)dosomething();外面加上花括号的话是不是能够得到同样的效果。
转载请注明原文地址: https://ibbs.8miu.com/read-32031.html