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

在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-18
怎麼添加手機聯系人裡的微信
怎麼添加手機聯系人裡的微信
在微信中添加手機聯系人的微信,隻需要四個步驟即可。打開微信,點擊右上角“加号”,進入“添加好友”界面,在“添加好友”界面,點擊“手機聯系人”選項,就可以進入“通訊錄朋友”添加界面,接着點擊通訊錄聯系人右側的添加按鈕即可。下面我們來看詳細的操...
2026-01-18
手機進水了2小時怎麼處理
手機進水了2小時怎麼處理
俗話說“生活處處有驚喜”,時不時有的“驚喜”還會變成驚吓呢,現在很多人上個洗手間都還玩手機,所以手機掉水裡估計很多人都發生過吧(嘻嘻嘻,是不是猜中的)。現在一個智能手機也是好幾千塊錢呀,掉水裡他拯救好真的要淚從頭上流了,所以有很多的手機廠家...
2026-01-18
vba字符串精确匹配正則
vba字符串精确匹配正則
我們在查找時通常會用通配符“*”表示任意字符,在正則表達式中也有一些固定的字符,它們可以表達某一類型的字符,以實現強大的匹配能力,這就是元字符。下面例舉一些常用的元字符:(注意大小寫之分)\d匹配一個數字字符\D匹配一個非數字字符\w匹配包...
2026-01-18
阿裡巴巴公司是如何發展到今天的
阿裡巴巴公司是如何發展到今天的
以科技為核心的基調,在2007年阿裡市值約為百億美元的時候,就已經定下了。2019年備受追捧的“數據中台”概念,實際上來自于阿裡在2015年就提出的“中台戰略”。如果再向前追溯,會發現2008年“五彩石”項目創造性誕生中的“中間件”概念,已...
2026-01-18
Copyright 2023-2026 - www.tftnews.com All Rights Reserved