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

在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
推荐阅读
筆記本電腦的保修期是多久
筆記本電腦的保修期是多久
筆記本電腦的保修期是多久?全部件保修期通常為一年,第二年為保修服務,接下來我們就來聊聊關于筆記本電腦的保修期是多久?以下内容大家不妨參考一二希望能幫到您!筆記本電腦的保修期是多久全部件保修期通常為一年,第二年為保修服務。不同的筆記本型号不同...
2026-01-21
速達進銷存軟件一套多少
速達進銷存軟件一套多少
速達軟件,企業管理軟件提供商疫情防控常态化的現在,給市場與企業競争帶來了一定的挑戰,特别是對于中小企業。但數字經濟的發展以及互聯網信息技術的應用也給中小企業創造了與大型企業、國外企業等平等競争的有利條件。其中進銷存管理則是企業管理中至關重要...
2026-01-21
配電櫃如何與母線槽軟連接
配電櫃如何與母線槽軟連接
傳統的母線槽正在受到電纜尤其是分支電纜的挑戰。多年的實踐經驗證明,二者在産品性能、應用領域和經濟成本等方面各有千秋,不能簡單地下結論。本文對電纜和母線槽做了多方面的比較,可供參考。1、普通母線槽與電纜的性能特點所謂普通母線槽,就是通過合理、...
2026-01-21
吉利收購魅族意味着什麼
吉利收購魅族意味着什麼
本文原創,禁止搬運和抄襲,違者必究!吉利正式收購魅族的消息已經傳開了,由吉利旗下的星紀時代公司參與收購,掌握魅族79.09%的股份,從此魅族會成為吉利間接控股的公司。但魅族會保留獨立品牌發展,目前星紀時代副董事長沈子瑜已經成為魅族新的法人代...
2026-01-21
微信沒有綁定手機号怎麼找回密碼
微信沒有綁定手機号怎麼找回密碼
微信沒有綁定手機号怎麼找回密碼?忘了密碼,也沒有綁定手機号,可以通其它方式進行登錄點擊小藍字部分,有個使用其他方式登錄,今天小編就來說說關于微信沒有綁定手機号怎麼找回密碼?下面更多詳細答案一起來看看吧!微信沒有綁定手機号怎麼找回密碼忘了密碼...
2026-01-21
Copyright 2023-2026 - www.tftnews.com All Rights Reserved