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

在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-28
華為mate30pro微信怎麼分身
華為mate30pro微信怎麼分身
以華為mate30pro、EMUI11、微信8.0.0為例。點擊打開設置。選擇打開應用選項。在這個界面點擊應用分身。選擇要設置分身的應用。開啟之後返回到手機主界面,可以看到應用分身開啟。如果要關閉,打開設置選擇應用,然後點擊應用分身選項。點擊開啟分身功能即可。
2026-01-28
如何設置浏覽器默認主頁
如何設置浏覽器默認主頁
演示機型:華為MateBookX系統版本:win764位旗艦版1、首先打開浏覽器,點擊右上角的圖标位置。2、在彈出的菜單中,點擊設置。3、進入浏覽器設置項,點擊修改主頁。4、在彈出的主頁設置框裡,輸入想要設為首頁的網址。5、設置完成以後,再次打開浏覽器時,發現打開的頁面換成了剛才設置的地址即可。浏覽器:浏覽器是用來檢索、展示以及傳遞Web信息資源的應用程序。Web信息資源由統一資源标識符(Unif
2026-01-28
尼康d610配什麼鏡頭
尼康d610配什麼鏡頭
1、D610是非常好的機身,雖然高感不如同級别的佳能6D,但傳感器的動态範圍和色彩深度比6D強出很多...
2026-01-28
電水壺維修方法
電水壺維修方法
1、電熱水壺水燒開了之後他就不會自動斷電了。電熱水壺有很多經常出現的問題,今天給大家介紹一下。電熱水...
2026-01-28
Copyright 2023-2026 - www.tftnews.com All Rights Reserved