首页
/
每日頭條
/
生活
/
dowhile循環的用法c語言
dowhile循環的用法c語言
更新时间:2026-10-25 06:10:19

dowhile循環的用法c語言(C語言新手絕對不知道的do)1

C語言中do{...}while(0)的秒用

今天看了些有關do{...}while(0)秒用的文章,覺得寫的很好,這裡總結下分享給大家。

這裡分享的有3個用法,分别是:

1.避免空的宏定義在編譯時出現warning。

2.多個語句一起,定義成一個宏時,增加代碼适應(特别是條件語句調用這類宏要注意)

3.避免部分goto語句的使用

1.避免空的宏定義在編譯時出現warning

//例如:

#define foo() do{}while(0)

2.多個語句一起,定義成一個宏時,增加代碼适應(特别是條件語句調用這類宏要注意),以下if(0)和if(1)在實際應用時是if(表達式),表示表達式假和真。

//例如:一個宏包含以下兩個語句,

#define foo()

fun1();

fun2;

編譯器預處理的時候

if(1)foo();

//此時就相當于下面的語句,

if(0)fun1();

fun2();//邏輯上多執行的代碼,會導緻系統BUG

;//邏輯上多執行的代碼

如果使用do{...}while(0)就可以解決上面的問題

#define foo()

do{

fun1();

fun2();

}while(0)

//對于下面的語句

if(0) foo();

//編譯後的執行如下:

if(0) do{

fun1();

fun2();

}while(0);

這樣就不會出現上面那種有邏輯上不該執行的代碼被執行的問題。當然這裡也可以用其他方法避免這個問題,比如加大括号{}

#define foo() {fun1();fun2;}

編譯器會預處理下面語句

if(0) foo();

//編譯後的執行如下:

if(0) {

fun1();

fun2();

}

;//會多個;号,但是也沒有邏輯上的問題

語句塊宏定義時注意的就是這些,另外在寫if語句時,盡量後面要加大括号,避免出錯,例如上面的if(0){foo();},加上大括号{}也不會有問題。

3.避免部分goto語句的使用

//例如:如果一個函數要分配一些資源,然後中途遇到錯誤,要退出函數,退出前要釋放資源,代碼結構可能如下:

bool foo(){

int *p = (int*)malloc(5*sizeof(int));

bool bOk = true;

//執行并處理錯誤

bOk = fun1();

if(!bOk){

free(p);

p=NULL;

return false;

}

bOk = fun2();

if(!bOk){

free(p);

p=NULL;

return false;

}

bOk = fun3();

if(!bOk){

free(p);

p=NULL;

return false;

}

//......

//執行成功,釋放資源并返回ture

free(p);

p = NULL;

return true;

}

這裡就覺得很多代碼冗餘,然而使用溝通可以很好的解決冗餘的部分,代碼如下:

bool foo(){

int *p = (int*)malloc(5*sizeof(int));

bool bOk = true;

//執行并處理錯誤

if(!fun1()) goto errorlable;

if(!fun2()) goto errorlable;

if(!fun3()) goto errorlable;

//......

//執行成功,釋放資源并返回ture

free(p);

p = NULL;

return true;

//冗餘部分的,錯誤返回代碼

errorlable:

free(p);

p = NULL;

return false;

}

然後C語言中過多的使用goto語句會提高程序的靈活性,繁雜點的程序會讓程序員捉摸不定,程序跳來跳出,難以捉摸,容易邏輯上産生混淆從而出現BUG。對于上面的這種情況使用do{...}while(0)就可以很好的解決這些跳來跳出的問題,代碼結構如下:

bool foo(){

//分配資源

int *p = (int*)malloc(5*sizeof(int));

bool bOk = true;

//執行并處理錯誤

do{

bOk = fun1();

if(!bOk)break;

bOk = fun2();

if(!bOk)break;

bOk = fun3();

if(!bOk)break;

//......

}while(0);

//釋放資源并返回bOk

free(p);

p = NULL;

return bOk;

}

,
Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
讓廚房不再油膩膩!廚房清潔的技巧
讓廚房不再油膩膩!廚房清潔的技巧
讓廚房不再油膩膩!廚房清潔的技巧廚房清潔的技巧1、爐竈的清潔把檸檬或是橘子的皮,放入水中煮沸,待到水冷卻後用布蘸濕,就可以輕松擦洗煤氣爐、燃氣爐上的污垢。還可以用黏稠的米湯塗在爐竈上,待幹燥後,米湯結痂,會把油污粘在一起,隻要清潔米湯的結的痂就可以輕松去除污垢。2、抽油煙機的清潔說到廚房的清理,最恐...
2026-10-25
夏天釣魚技巧
夏天釣魚技巧
可以說釣魚是一項休閑的運動吧,很多的朋友們都比較喜歡釣魚,但是釣魚也是很多的技巧跟方法的,尤其是在炎熱的夏天,朋友們一定要掌握釣魚的技巧,才能夠享受其中的樂趣,那麼夏天釣魚技巧都有哪些呢?喜歡釣魚的朋友們您不妨一起來看看文章的相關介紹吧,相信肯定會給您帶來幫助的。夏天釣魚技巧有哪些呢?因為夏天比較炎...
2026-10-25
眼鏡防霧的竅門
眼鏡防霧的竅門
眼鏡防霧的竅門:冬天從室外到室内,戴眼鏡的人總是會看不清東西,原因就是眼鏡上蒙了一層水汽,現在教你一個防止眼鏡起霧的竅門。步驟:1、将肥皂頭兒泡在溫水裡,做成肥皂水。2、将肥皂水均勻地塗抹在眼鏡片上。3、用眼鏡布輕輕擦幹淨即可。原理:因為肥皂含有油脂成分,将肥皂水塗抹在鏡片上,鏡片就不容易沾上水汽。...
2026-10-25
床墊也需巧保養 保持衛生助健康
床墊也需巧保養 保持衛生助健康
随着人們生活水平的提高,對睡眠質量的要求也越來越高,而相應的對床墊的要求也提高了很多,少則上千元,動則上萬元。而很多人買回床墊,卻從來沒有打理過床墊,或是連塑料包裝都沒有去掉過。這樣的保養是不可取。床墊也需巧保養保持衛生助健康保養一款床墊是很有必要的,使用和保養好一款床墊可以相當于不會保養使用兩張床...
2026-10-25
窗簾根本不用拆下來洗 不同材質的窗簾不同清潔方式
窗簾根本不用拆下來洗 不同材質的窗簾不同清潔方式
日常生活中我們清洗窗簾時,經常需要拆下來清洗,今天作文庫知識百科教大家一個小竅門,窗簾不用拆下來也能清洗,下面一起來了解一下吧。我們先準備一個噴壺,然後再往噴壺裡倒入少許的洗衣液,接着再倒入少許的洗潔精,然後再倒入少許的白醋,添加白醋之後再滴入幾滴花露水,最後倒入清水,搖晃均勻。搖晃均勻後,将窗簾噴...
2026-10-25
Copyright 2023-2026 - www.tftnews.com All Rights Reserved