當前位置

首頁 > 商務英語 > 計算機英語 > c語言裡while的用法

c語言裡while的用法

推薦人: 來源: 閱讀: 2.8W 次

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

padding-bottom: 56.25%;">c語言裡while的用法

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

1、避免goto語句:

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

C程式碼

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

C程式碼

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

C程式碼

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

在linux核心原始碼中,經常看到如下巨集以避免在編譯時出現警告:

#define FOO do { } while(0)

3、提供一個宣告區域性變數的基礎塊:

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

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

然而在某些情況下將會失效,下面的程式碼使用...

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();

錯誤出在“;”直接位於程式碼塊的後面,解決的辦法是將程式碼嵌入e(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 %sn", x);

do_something_useful(x);

現在想像一下下面的程式碼:

if (blah == 2)

FOO(blah);

這將解釋為:

if (blah == 2)

printf("arg is %sn", blah);

do_something_useful(blah);;

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

if (blah == 2)

do {

printf("arg is %sn", blah);

do_something_useful(blah);

} while (0);

這樣上面的巨集就可以改為:

1 #define FOO(x) do {

2 printf("arg is %sn", blah);

3 do_something_useful(blah);

4 } while (0)

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