青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

woaidongmao

文章均收錄自他人博客,但不喜標題前加-[轉貼],因其丑陋,見諒!~
隨筆 - 1469, 文章 - 0, 評論 - 661, 引用 - 0
數據加載中……

do..while(0)的用法

真是的,我用C++還是太少了。這個宏以前明明見過的,但其存在的意義突然就想不起來了。剛才問了下axx大才又知道了一次。趕緊記下來。

這樣的宏見過么:

Cpp代碼 clip_image001

  1. #define FOO(x) do {\  
  2.     some_code_line_1;\  
  3.     some_code_line_2;\  
  4. } while (0) 
#define FOO(x) do {\
    some_code_line_1;\
    some_code_line_2;\
} while (0)


(注意while(0)后面沒有分號)

乍一看這個宏不過就是定義了個包含多個語句的local scope,用do..while(0)包圍起來簡直多此一舉。直接這樣不就好了么:

Cpp代碼 clip_image001

  1. #define FOO(x) {\  
  2.     some_code_line_1;\  
  3.     some_code_line_2;\  
#define FOO(x) {\
    some_code_line_1;\
    some_code_line_2;\
}



但問題是這兩者不等價……

關鍵問題是前者定義出來的宏是一個非復合語句,而后者是一個復合語句。C/C++里有些語法結構對復合/非復合語句之間的區別是敏感的,例如說:

Cpp代碼 clip_image001

  1. if ( someCond )  
  2.     FOO(x);  
  3. else 
  4.     //... 
if ( someCond )
    FOO(x);
else
    //...


要是FOO(x)展開后是一個復合語句,那么FOO(x)后面的分號“;”就會終結整個if語句,導致else子句孤立而出現編譯錯誤。
所以關鍵是那個while(0)后面不加分號。如果加了分號的話就沒意義了。

如果用復合語句版本的宏,就要記得不寫那個分號:

Cpp代碼 clip_image001

  1. if ( someCond )  
  2.     FOO(x)  
  3. else 
  4.     //... 
if ( someCond )
    FOO(x)
else
    //...


但是這樣與一般的函數調用風格不統一,所以很多人傾向于使用do..while(0)這個trick來把local scope包起來而不是直接用復合語句({..})。

印象中這類的宏還有一個變種,

Cpp代碼 clip_image001

  1. #define FOO(x) switch(0) default: ... 
#define FOO(x) switch(0) default: ...


還是怎樣的。具體是怎么寫的忘記了……以后想起來的話一定得記下來 T T

 

 

do...while(false)的妙用

今天從Java自由人看到一篇Blogdo...while(false)的探討,剛好解決了一直困擾我的一個小麻煩clip_image001
經常會遇到這樣的情況,一大段代碼,中間遇到某種情況,比如someObj == null,需要跳出這段代碼,但是又不在循環之中,只好處理成這樣:

clip_image002clip_image003if(someObj != null)clip_image004{
clip_image005 
//doSomethingclip_image004
clip_image005
  clip_image004
clip_image006clip_image007 
if(someOther fit someCondition)clip_image004{
clip_image005    clip_image004
clip_image008  }

clip_image009}

最后造成一大堆括號,寫起來不舒服,可讀性也很差。

巧用do...while(false)可以解決這個問題,看下面的代碼:

clip_image010function LTrim(s){
clip_image010 
try{
clip_image010   
do{
clip_image010     
if(null==s||s.length<=0)
clip_image010       
break;
clip_image010     
var whitespace=" \t\r\n";
clip_image010     
if(whitespace.indexOf(s.charAt(0))>=0){
clip_image010       
var len=s.length;
clip_image010       
var index;
clip_image010       
for(index=0;index  if(whitespace.indexOf(s.charAt(index))<0)
clip_image010           
break;
clip_image010       
if(index s=s.substring(index);
clip_image010       
else s="";
clip_image010      }
clip_image010    }
while(false);
clip_image010  }
catch(Ab){
clip_image010  s="";
clip_image010  }
clip_image010 
return s;
clip_image010}


這個函數是用來去掉字符串前端的空白。使用do...while(false)的用意就在于在do{}的過程中可以break,使得函數唯一的出口就是最后一行的return
嗯,這是一個不錯的方法。以后可以采用,避免過多的嵌套括號。
(
以上部分摘抄Blogdo...while(false)的探討)

 

posted on 2009-03-11 13:09 肥仔 閱讀(4066) 評論(0)  編輯 收藏 引用 所屬分類: C++ 基礎

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久一区免费| 99re热精品| 亚洲视频在线观看一区| 日韩视频免费观看高清完整版| 激情久久久久久久久久久久久久久久 | 欧美日韩八区| 欧美女激情福利| 欧美性视频网站| 国产精品亚洲综合久久| 国产又爽又黄的激情精品视频| 国模精品一区二区三区| 亚洲精品小视频在线观看| 亚洲视频1区2区| 久久精品亚洲| 亚洲精品国产精品乱码不99 | 亚洲清纯自拍| 99精品99| 久久久成人网| 欧美在线一区二区| 美女视频黄 久久| 日韩系列欧美系列| 久久激情综合网| 欧美日韩1区| 国产伦理一区| 日韩视频欧美视频| 久久精品一区四区| 亚洲国产精品久久久| 亚洲深夜福利网站| 蜜臀a∨国产成人精品 | 亚洲精品一区二区三区99| 亚洲一区日韩在线| 欧美粗暴jizz性欧美20| 亚洲影视在线| 欧美另类在线播放| 亚洲高清免费| 久久精品人人做人人爽电影蜜月| 亚洲人体偷拍| 久久综合久久久| 国产视频在线观看一区| 亚洲小视频在线| 亚洲经典视频在线观看| 久久精品国产欧美亚洲人人爽 | 有码中文亚洲精品| 欧美中文字幕| 亚洲一区二区在线免费观看视频| 欧美凹凸一区二区三区视频| 国产精品自拍一区| 亚洲精品永久免费精品| 久久精品麻豆| 亚洲欧美日韩国产| 国产精品九九| 亚洲欧美日韩国产综合精品二区 | 午夜精品久久久久久久99水蜜桃| 亚洲国产乱码最新视频| 久久一区二区三区四区五区| 国产精品一区二区三区久久| 亚洲图片在线| 亚洲一区二区成人| 国产精品久久久久久久久搜平片 | 欧美日韩在线播放三区| 亚洲理论电影网| 亚洲人成久久| 欧美色图麻豆| 午夜日韩av| 欧美一级视频精品观看| 国产亚洲激情视频在线| 久久夜色精品国产亚洲aⅴ| 久久久www免费人成黑人精品| 狠狠久久亚洲欧美专区| 欧美高清你懂得| 欧美成人午夜视频| 欧美高清免费| 亚洲制服丝袜在线| 香蕉久久夜色精品| 在线精品福利| 亚洲精品久久在线| 国产伦精品一区二区三区| 久久久久免费视频| 欧美国产日韩视频| 午夜一区二区三视频在线观看 | 午夜在线电影亚洲一区| 国内精品视频一区| 最新成人av网站| 国产精品视频精品| 欧美国产日韩视频| 欧美三级在线播放| 久久久久久穴| 欧美日本亚洲视频| 久久久久99| 欧美好骚综合网| 午夜综合激情| 欧美不卡视频| 久久se精品一区精品二区| 久久综合九色欧美综合狠狠| 亚洲网在线观看| 久久蜜桃精品| 午夜亚洲一区| 欧美人与性动交cc0o| 久久电影一区| 欧美视频免费看| 亚洲影院色无极综合| 欧美亚洲免费电影| 麻豆九一精品爱看视频在线观看免费| 在线视频亚洲| 美女亚洲精品| 久久久伊人欧美| 欧美日韩亚洲一区二区三区四区| 久久精品一级爱片| 欧美三区在线观看| 亚洲国产日韩一级| 伊人久久噜噜噜躁狠狠躁| 亚洲图片欧洲图片日韩av| 亚洲日本中文字幕免费在线不卡| 性色一区二区三区| 亚洲欧美www| 欧美日韩精选| 亚洲国产精品成人一区二区 | 一本色道**综合亚洲精品蜜桃冫 | 国产精品无码专区在线观看| 亚洲电影免费观看高清完整版在线观看 | 最近中文字幕mv在线一区二区三区四区 | 亚洲欧美国产视频| 亚洲一区二区三区在线| 欧美a一区二区| 欧美 日韩 国产在线| 国产综合在线看| 午夜精品国产| 欧美日韩国产综合视频在线观看中文| 麻豆精品网站| 国产亚洲一本大道中文在线| av成人国产| 亚洲女同在线| 国产精品久久久久久久久久免费| 亚洲欧洲精品一区二区三区| 亚洲国产欧美精品| 欧美 日韩 国产一区二区在线视频 | 久久久久久久网站| 国产日韩欧美亚洲一区| 亚洲自拍三区| 久久爱www| 激情久久久久| 母乳一区在线观看| 亚洲欧洲在线一区| 一区二区三区国产| 国产精品国产三级国产专播精品人 | 在线精品国精品国产尤物884a| 亚洲小说春色综合另类电影| 亚洲一区二区三区在线视频| 欧美日韩精品免费| 一区二区三区波多野结衣在线观看| 夜夜嗨av一区二区三区四区| 欧美日韩99| 亚洲一级免费视频| 久久婷婷亚洲| 日韩视频在线一区二区| 欧美日韩一区二区在线播放| 一区二区三区精品在线| 久久国产欧美精品| 亚洲国产精品一区| 欧美三区在线观看| 欧美专区在线播放| 亚洲国产日韩欧美在线99| 亚洲女同精品视频| 一区二区在线视频| 欧美日韩三级视频| 久久成人国产| aa日韩免费精品视频一| 久久综合久久综合久久综合| 亚洲精品一区二区三区在线观看| 欧美天天在线| 毛片av中文字幕一区二区| 在线综合亚洲欧美在线视频| 久久成人国产精品| 日韩视频免费观看| 国产一区99| 欧美精品自拍| 久久人人精品| 亚洲欧美视频一区| 日韩视频免费观看| 久久综合给合| 香蕉久久夜色精品国产使用方法| 在线观看欧美一区| 最近中文字幕日韩精品| 欧美在线播放高清精品| 亚洲麻豆一区| 在线观看成人一级片| 国产女主播一区二区三区| 欧美巨乳在线| 另类图片国产| 久久高清国产| 亚洲欧美日韩国产综合在线| 亚洲国产精品一区二区第一页| 欧美自拍偷拍午夜视频| 亚洲视频 欧洲视频| 91久久精品美女高潮| 国产一区激情| 国产日韩精品久久| 国产精品久久久久久模特| 欧美人成在线视频| 免费在线欧美视频|