9久久伊人精品综合,亚洲一区精品视频在线,成 人免费va视频,国产一区二区三区黄网,99国产精品永久免费视频,亚洲毛片多多影院,精品久久久无码人妻中文字幕,无码国产欧美一区二区三区不卡
學習啦>學習英語>專業英語>計算機英語>

c語言里while的用法

時間: 長思709 分享

  在C語言中,經常看到do...while(0)的宏,do...while(0)有很多作用,下面小編就為大家分享c語言里while的用法,希望對你有用。

  c語言里while的具體用法如下:

  1、避免goto語句:

  通常,如果一個函數開始要分配一些資源,然后如果在中途遇到錯誤則要退出函數,當然,退出前要釋放資源,我們的代碼可能如下:

  C代碼

  這里最大的問題是代碼冗余,每增加一個操作,就要做相應的錯誤處理,非常不靈活,于是想到了一下的goto:

  C代碼

  代碼冗余是解決了,但是引入了C語言中比較微妙的goto語句,雖然正確的使用goto語句可以大大提高程序的靈活性與簡潔性,但是會使我們的程序捉摸不定,為了既避免使用goto語句,又能消除代碼冗余,可以考慮使用下面的 do...while(0):

  C代碼

  2、避免空聲明在編譯時出現警告:

  在linux內核源代碼中,經常看到如下宏以避免在編譯時出現警告:

  #define FOO do { } while(0)

  3、提供一個聲明局部變量的基礎塊:

  你可能經常會使用如下的宏:

  #define exch(x,y) { int tmp; tmp=x; x=y; y=tmp; }

  然而在某些情況下將會失效,下面的代碼使用if...else...

  if (x > y)

  exch(x,y); // 分支 1

  else

  do_something(); // 分支 2

  但是將被解釋為一個分支的if語句:

  if (x > y) {

  int tmp;

  tmp = x;

  x = y;

  y = tmp;

  }

  ; // 空語句

  else // ERROR!!!

  do_something();

  錯誤出在“;”直接位于代碼塊的后面,解決的辦法是將代碼嵌入do...while(0),于是得到下面的代碼:

  1 if (x > y)

  2 do {

  3 int tmp;

  4 tmp = x;

  5 x = y;

  6 y = tmp;

  7 } while(0);

  8 else

  9 do_something();

  ?于是上面的宏可以修改為:

  1 #define exch(x,y) do {\

  2 int tmp;\

  3 tmp = x;\

  4 x = y;\

  5 y = tmp;\

  6 } while(0)

  4、在條件語句中使用復雜的宏:

  假如一個宏包含類似如下幾行代碼:

  #define FOO(x) \

  printf("arg is %s\n", x); \

  do_something_useful(x);

  現在想像一下下面的代碼:

  if (blah == 2)

  FOO(blah);

  這將解釋為:

  if (blah == 2)

  printf("arg is %s\n", blah);

  do_something_useful(blah);;

  我們就會發現,if語句只作用于printf(), do_something_useful() 沒按照愿意一起執行,即沒有像你預期的那樣被包含在if代碼中,于是可以使用如下的代碼塊:

  if (blah == 2)

  do {

  printf("arg is %s\n", blah);

  do_something_useful(blah);

  } while (0);

  這樣上面的宏就可以改為:

  1 #define FOO(x) do { \

  2 printf("arg is %s\n", blah);\

  3 do_something_useful(blah);\

  4 } while (0)

  PS:以上的第三種和第四種技巧,并不是唯一的方法,有同學留言說用其他的方法也可以實現,反而顯得這樣的宏定義過于花哨?事實并非如此,這樣的宏定義在linux內核代碼中非常常見,原因是代碼簡潔、通用、可移植性好

515211 主站蜘蛛池模板: brazzers欧美巨大| 最新成免费人久久精品| 亚洲欧美中文字幕日韩一区二区| 99久久无色码中文字幕| 越南毛茸茸的少妇| 一区二区三区午夜无码视频| 日本一区不卡高清更新二区| 久久亚洲精品中文字幕馆| 亚洲国产精品美日韩久久| 久久国产免费观看精品3| 伦伦影院精品一区| 视频一区视频二区制服丝袜 | 亚洲日本VA午夜在线电影| 亚洲中文字幕国产综合| 午夜精品一区二区三区成人| 国产精品成人网址在线观看| 黄色三级亚洲男人的天堂| 亚洲欧美日韩在线不卡| 欧美国产日产一区二区| 精品国产免费一区二区三区香蕉| 高清国产亚洲精品自在久久| 图片区小说区av区| 亚洲国产欧美在线人成AAAA| 久久精品午夜视频| 4hu44四虎www在线影院麻豆 | 亚洲高潮喷水无码AV电影| 亚洲AV无码国产在丝袜APP| 东京热人妻无码一区二区av| 国产一区二区三区国产视频 | 免费人欧美成又黄又爽的视频| 亚洲av在线观看| 99久久国产成人免费网站| 华人在线亚洲欧美精品| 美日韩精品一区三区二区| 久久狠狠一本精品综合网| 久久精品丝袜高跟鞋| 欧美成人www免费全部网站| 中文字幕精品av一区二区五区| 无码精品人妻一区二区三区老牛| 国产一区二区三区导航| 中文字幕理伦午夜福利片|