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

在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-31
成都市科技計劃立項公示
成都市科技計劃立項公示
2022年8月,成都市科學技術局發布《關于組織申報2023年成都市第一批科技項目的通知》。本次申報涉及4個業務類别:●科技金融資助●創新創業載體創建補助●國際科技合作資助●科學技術普及資助申報要求?資助标準?如何申報?......下滑查看申...
2026-01-31
三星激光打印手機一體機
三星激光打印手機一體機
中國三亞,2017年4月18日——三星(中國)投資有限公司推出了最新的2.0版打印應用市場(PrintingAppCenter2.0),以幫助用戶更加便捷、高效地與開發人員溝通協作開發應用程序。三星打印應用市場是一個針對SmartUXCen...
2026-01-31
分時四驅和适時四驅哪個更貴
分時四驅和适時四驅哪個更貴
說到四驅系統,最常見一般分為三種,分時四驅、适時四驅還有全時四驅,每種四驅系統都有各自的特點。現在汽車市場上四驅的車子非常之多,大多數消費者都知道作為四驅的車子動力是非常強勁的。但是卻對每種四驅的作用一頭霧水,不知道它們之間有着什麼樣的區别...
2026-01-31
為啥要移動改善通話質量
為啥要移動改善通話質量
通訊員陳珊“您好,請把手機攝像頭對準光貓,我看一下指示燈。”近日,家住杭州上城區的張阿姨,家中的寬帶網絡出現了故障。通過“5G視頻客服”,浙江10086服務坐席很快就為張阿姨排查了故障,解決了寬帶網絡的問題。自2021年起,中國移動浙江公司...
2026-01-31
Copyright 2023-2026 - www.tftnews.com All Rights Reserved