首页
/
每日頭條
/
科技
/
在linux下怎麼運行c語言編程
在linux下怎麼運行c語言編程
更新时间:2026-01-22 00:42:37

在linux下怎麼運行c語言編程(linux的C語言編程技巧)1

今天在閱讀linux代碼的時候,看到linux很多代碼都用了:剛開始以為這是多此一舉,既然是while(0),那麼寫和沒寫都是一個樣。但是在好奇心的驅動下,查閱了許多資料後,發現,這句代碼真的是“神”一般的操作,那麼它到底有什麼作用呢?

一,避免使用goto控制流程:

我們在一些函數中,如果在退出前,需要一些清理工作,正常情況下,我們可以使用goto來實現,比如:

int foo() { somestruct *ptr = malloc(...); dosomething...; if(error) goto END; dosomething...; END: free(ptr); return 0; } 但是由于goto

但是由于goto不符合結構化設計,很多人都不倡導使用,這時候就可以使用do while了:

int foo() { somestruct *ptr = malloc(...); do { dosomething...; if(error) break; dosomething...; } while(0); free(ptr); return 0; }

這裡将函數主體部分使用do{...}while(0)包含起來,使用break來代替goto,後續的清理工作在while之後,現在既能達到同樣的效果,而且代碼的可讀性、可維護性都要比上面的goto代碼好的多了。

二.避免宏定義的一些編譯或者錯誤:

我們假設定義一個宏:

#define DELETE_IT(p) delete p; p = NULL;

那麼在下面的代碼中:

If(NULL!=p) DELETE_IT(p) else .......

宏會被展開成:

If(NULL!=p) delete p; p=NULL; else ........

那麼就存在兩個問題:

1,編譯錯誤:因為if分支後面有兩個語句,導緻else分支沒有對應的if

2,邏輯錯誤:假設沒有else分支,則SAFE_FREE中的第二個語句無論if測試是否通過,都會執行,這個就很嚴重

那麼有什麼辦法解決這個問題嗎?答案是有,do while就是用來解決這個問題的:

#define DELETE_IT(p) do { delete p; p=NULL; } while(0);

這樣定義,展開後,就變成:

If(NULL!=p) do { free(p); p=NULL; } while(0); else .......

這樣就可以避免上面的問題了

即學即用的技巧,可以在代碼秀一下了

,
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
推荐阅读
真正的雙攝手機
真正的雙攝手機
今年真的是火了雙攝像頭手機,很多國産手機廠商都不甘落後,先後推出了多款雙攝像頭手機,包括華為、vivo等。但是雙攝像頭的手機價格上一般不便宜,動辄就在上千元。學生黨的你們很多時候也就隻能解解眼饞,而不能真正入手。但小編近日上網一搜,竟然看到...
2026-01-22
手機殼高清豎屏
手機殼高清豎屏
新來的朋友,點右上角關注差評哦!!最新最前沿黑科技,滿足你的求知欲!前幾天,托尼在後台看到幾個員工的留言:托尼老闆,有沒有什麼實用又很酷的手機殼呀。。剛買了新手機(手動委屈委屈)老闆,什麼時候給我們推薦個手機殼吧……最好騷騷的那種,屎黃屎黃...
2026-01-22
小米都有什麼黑科技
小米都有什麼黑科技
2021剛開年,小米就動作頻頻。上周,小米剛剛發布了「隔空充電技術」,可以實現數米半徑内,多設備移動、無線充電,充電功率可達5W,讓人驚歎《三體》裡的科幻劇情,已悄悄變成了現實。▲隔空充電場景展示而在今天下午,小米又拿出了一款概念手機。關于...
2026-01-22
铠俠sata接口固态硬盤速度
铠俠sata接口固态硬盤速度
不知道大家有沒有發現傳統移動硬盤正被小而便攜的固态慢慢取代,帶來的速度提升也是成幾十倍提升,不過憑借更加平民的價格定位同樣還有很大一部分用戶還在使用。而對于像我這樣在外使用或者說像我這樣辦公室家裡雙地無場景區别的上班族來說使用起來就非常不方...
2026-01-22
現在骁龍865的手機還值得購買嗎
現在骁龍865的手機還值得購買嗎
随着骁龍888新旗艦機的發布,2020年骁龍865手機也進入了清倉期,這些天雷軍瘋狂在社交媒體宣傳小米10,可見小米是擠壓了多少庫存啊,但有一說一,來到2021年還是有很多骁龍865手機值得撿漏的,比如以下這三款,全都是高配低價,用3年無壓...
2026-01-22
Copyright 2023-2026 - www.tftnews.com All Rights Reserved