由linux中的一个宏定义引发的思考
来源:互联网 发布:四人网络防诈骗小剧本 编辑:程序博客网 时间:2024/06/05 00:16
有时候会在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();外面加上花括号的话是不是能够得到同样的效果。
#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();外面加上花括号的话是不是能够得到同样的效果。
- 由linux中的一个宏定义引发的思考
- 由一个问题引发的思考
- 一个由PING引发的思考
- 由一个面试题引发的思考
- 由一个线程例子引发的思考
- 由一个函数引发的改进思考
- 由一个小程序引发对 size_type类型的思考
- 由一个线程例子引发的思考(转载)
- 一个由List.removeAll()失效引发的思考
- 由InvocationTargetException引发的思考
- 由BigDecimal引发的思考
- 由IsPostBack引发的思考
- 由InvocationTargetException引发的思考
- 由B2C引发的思考
- 由cursor引发的思考
- 由size_t引发的思考
- 由volatile引发的思考
- 由APUE中的错误处理函数err_xxx引发的思考
- 项目管理: Maven 让事情变得简单
- WIN Multi-Thread Programe
- java学习之路
- 如何在C8051里面精确的做延时
- .NET Framework 2.0 中新增的两个压缩类
- 由linux中的一个宏定义引发的思考
- JAVA 实现内存管理 和 LOG 保存的 代码
- I am fooled
- 获得窗口和其他类指针的方法
- 硬件基础-cpu篇
- java日期操作实例
- 匈牙利命名法
- 我的第一篇文章
- Web Server Programming