当前位置:  技术问答>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();

的时候就有意义了,单纯使用{}会编译不同过。

|
可替代goto

程序判断比较多的时候,用goto会比较简洁,但既然不推荐使用goto,do{} while(0),就是一个不错的选择了。

|
一般用在宏里面,可以把多个语句放在一起,而且宏定义里面是没有分号的,do{...}while(0)刚好又可以加分号。

|
毛德操写得那本linux内核源代码情景分析第1章有关于do;while(0)解释。楼主可以看一下。

|
这样的代码结构,因为后面是while(0),所以正常情况下,代码只执行一次。那这样的写法有什么用处呢?
我觉得还是为了利于代码本身的结构简洁;比如do后面的有什么地方出错了,直接break,就执行到while(0)的后面那一行了;尤其是在错误检查比较多的情况下,do{} whle(0)很省力的,更主要的是代码结构很简洁,可读性、可维护性都很强。
   我的理解,不知道对不对。。。

|
一般这个都跟着宏定义,当这个宏没有定义的时候你总不能编译不通过吧 。 

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Linux 下c++开发error while loading shared libraries问题解决
  • 用while循环等待事件发生时是否可以释放系统资源
  • for(iter.hasNext()){....}用法与while有什么区别?
  • 消息队列一般是怎么使用的,是采用While的方式进行轮询么
  • shell 的 while无限循环问题!
  • shell脚本中while不能嵌套?
  • .net/c#/asp.net iis7站长之家
  • 请教一个基础问题while循环怎么从10到0来循环10次?
  • 新手请教:while read中末尾的重定向表示什么意思?
  • proc时错误:error while loading shared libraries.....
  • Bash 中的while 语句
  • 关于shell中的while循环的使用,求助
  • shell 脚本 while循环结构问题,急ing,,,,,,
  • shell编程中while的问题,高分
  • error while loading shared libraries:在线等
  • 请问为什么这样的两个while循环却有不同的效果
  • 简单的shell脚本 关于while循环
  • MySQL与MSSQl使用While语句循环生成测试数据的代码
  • cygwin——error while loading shared libraries:?
  • for( ; ; ) 与 while( 1 ) ?
  • while和for可以相互转换的例子分享


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,