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

在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-17
台式電腦win10忘記開機密碼怎麼解決
台式電腦win10忘記開機密碼怎麼解決
台式電腦win10忘記開機密碼怎麼解決?原賬号的密碼我們确實忘記了,但是我們可以通過行的賬号來進行登錄,這個就需要通過一種特殊的安全模式進行操作了,現在小編就來說說關于台式電腦win10忘記開機密碼怎麼解決?下面内容希望能幫助到你,我們來一...
2026-01-17
克蘇魯的呼喚電腦配置
克蘇魯的呼喚電腦配置
NEOWIZ和Round8工作室透露了他們正在制作的類魂遊戲《匹諾曹的謊言》(LiesofP)的官方PC系統配置要求(Steam産品頁面)。據公布的信息,PC遊戲玩家最低需要8GB内存,AMDRyzen31200或英特爾酷睿i5-7500,...
2026-01-17
oppo手機如何快速超級截屏
oppo手機如何快速超級截屏
說到手機截屏,相信網友們都不陌生,一般情況下,截屏的操作步驟無非是同時按住“電源鍵”和“音量鍵”,然而使用這種方式截屏并不高效,比方說,當好友給你微信發來一條勁爆信息時,然後當你要按住“電源鍵”和“音量鍵”截屏時對方早已撤回了,那麼這種情況...
2026-01-17
typec44w快充數據線
typec44w快充數據線
•前言XTAR愛克斯達一直深耕于電池和智能充電器的研發與生産,推出過很多充電産品,例如雙槽21700/18650的PB2S充放二合一,還有VC8智能充電器,以及經典的VC4充電器。接下來我們就來看下XTAR新推出的VC4L多功能充電器,他是...
2026-01-17
Copyright 2023-2026 - www.tftnews.com All Rights Reserved