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

在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
推荐阅读
電腦出現許可證過期怎麼辦
電腦出現許可證過期怎麼辦
一般情況下,電腦預裝系統的激活期限為永久激活,但是還是有部分小夥伴使用中會發現系統提示許可證即将過期。今天我們就來分析這種情況出現的原因及解決方法。1預裝驗證碼被覆蓋。部分局域網環境中有更高級的驗證碼(例如公司網絡、校園網之類)覆蓋掉預裝的...
2026-01-26
618哪些手機值得購買
618哪些手機值得購買
前排提示:今年的618購物節,已經在剛剛正式開始了。下面正式進入我們今天的主題。自從上次發完3000塊的手機推薦之後,機哥就經常看到有機友在催我,搞一期給長輩們的千元機。别罵了别罵了,真的有在做(其實之所以一直沒發,原因也很簡單:蹲一個更優...
2026-01-26
哪裡可以買手機分期付款
哪裡可以買手機分期付款
雖然消費金融最近幾年得到了長足的發展,但不少人還對線下辦理分期心存疑慮——辦理線下分期是不是很麻煩?費用是不是特别高?其實辦理線下分期業務非常簡單,并且當場就可以拿到産品,接下來這個故事,就是即有分期的一個普通客戶,辦理分期業務的整個過程。...
2026-01-26
seo優化模式
seo優化模式
seo優化模式?現在傳統的優化方法不太有用畢竟人腦有限,你很難随時抓住市場上的潛在客戶搜索熱詞借助專業的百度seo排名優化軟件,你的網站可以在3到15天内排名,直接到達搜索引擎結果的首頁,排名穩定,不容易掉,通過數據統計可以看到流量的提升,...
2026-01-26
新買的手機号已經被注冊了微信怎麼辦?
新買的手機号已經被注冊了微信怎麼辦?
新買的手機号已經被注冊了微信怎麼辦?直接手機注冊用新手機号注冊微信時出現以下情況,淡定操作,不要氣憤,按正常注冊操作,點擊“發送驗證碼”,現在小編就來說說關于新買的手機号已經被注冊了微信怎麼辦?下面内容希望能幫助到你,我們來一起看看吧!新買...
2026-01-26
Copyright 2023-2026 - www.tftnews.com All Rights Reserved