<em id="0a85b"><option id="0a85b"></option></em>

<abbr id="0a85b"></abbr>

      <nobr id="0a85b"></nobr>
        <tr id="0a85b"></tr>
        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 主站蜘蛛池模板: 国产a在视频线精品视频下载| 色综合久久久无码网中文| 人妻少妇偷人无码视频| 一本色道国产在线观看二区| 国产熟睡乱子伦视频在线播放| 国产精品无码无需播放器| 97精品国产高清在线看入口| 国内精品无码一区二区三区| 久久天堂av综合色无码专区| 久久精品亚洲国产综合色| 99久久久无码国产精品免费| 国产精品户外野外| 推油少妇久久99久久99久久| 美腿丝袜无男人的天堂| 国语精品自产拍在线观看网站| 少妇无码吹潮| 野外做受三级视频| 天堂√在线中文官网在线| 久久这里只有精品好国产| 色欲av无码一区二区人妻| 亚洲黄色片一区二区三区| 好吊视频在线一区二区三区| 精品无码国产不卡在线观看| 国产一区二区精品自拍| 四虎国产精品永久在线下载 | 人妻丰满熟妇无码区免费 | 亚洲av永久无码天堂影院| 欧美乱大交aaaa片if| 青草青草久热精品视频在线播放| 国产不卡一区在线视频| 精品国产线拍大陆久久尤物| 日韩成人一区二区三区在线观看| 在线观看国产成人AV天堂| av天堂中av世界中文在线播放 | 狠狠爱五月丁香亚洲综| 亚洲中文字幕乱码一二三区| 最新亚洲av日韩av二区| 国产精品片在线观看手机版| 亚洲男人av天堂久久资源| 武装少女在线观看高清完整版免费| 精品国产一区二区三区久|