当前位置: 技术问答>linux和unix
do {} while(0) 有什么妙用吗?
来源: 互联网 发布时间:2017-04-16
本文导语: 在 Linux 中 fork.c中 关于 宏定义prepare_to_task_struct 被定义为 #define prepare_to_copy(tks) do {} while(0) 这样定义有什么好处吗? 不明白,请各位高手指教。 | if(???) prepare_to_copy(); else ...
在 Linux 中 fork.c中 关于 宏定义prepare_to_task_struct 被定义为 #define prepare_to_copy(tks) do {} while(0) 这样定义有什么好处吗? 不明白,请各位高手指教。
|
if(???)
prepare_to_copy();
else
prepare_to_copy();
的时候就有意义了,单纯使用{}会编译不同过。
prepare_to_copy();
else
prepare_to_copy();
的时候就有意义了,单纯使用{}会编译不同过。
|
可替代goto
程序判断比较多的时候,用goto会比较简洁,但既然不推荐使用goto,do{} while(0),就是一个不错的选择了。
程序判断比较多的时候,用goto会比较简洁,但既然不推荐使用goto,do{} while(0),就是一个不错的选择了。
|
一般用在宏里面,可以把多个语句放在一起,而且宏定义里面是没有分号的,do{...}while(0)刚好又可以加分号。
|
毛德操写得那本linux内核源代码情景分析第1章有关于do;while(0)解释。楼主可以看一下。
|
这样的代码结构,因为后面是while(0),所以正常情况下,代码只执行一次。那这样的写法有什么用处呢?
我觉得还是为了利于代码本身的结构简洁;比如do后面的有什么地方出错了,直接break,就执行到while(0)的后面那一行了;尤其是在错误检查比较多的情况下,do{} whle(0)很省力的,更主要的是代码结构很简洁,可读性、可维护性都很强。
我的理解,不知道对不对。。。
我觉得还是为了利于代码本身的结构简洁;比如do后面的有什么地方出错了,直接break,就执行到while(0)的后面那一行了;尤其是在错误检查比较多的情况下,do{} whle(0)很省力的,更主要的是代码结构很简洁,可读性、可维护性都很强。
我的理解,不知道对不对。。。
|
一般这个都跟着宏定义,当这个宏没有定义的时候你总不能编译不通过吧 。