很容易把邏輯弄亂,增加理解難度,goto是可以實(shí)現(xiàn)無條件跳轉(zhuǎn)的,一旦跳轉(zhuǎn),就忽略很前面很多代碼,特別是在一些邏輯復(fù)雜的地方使用,會很容易出問題。所以goto能不用就不用,特別對于新手,盡量避諱。
優(yōu)點(diǎn):
方便處理異常情況,特別是內(nèi)存等系統(tǒng)資源的釋放。很多大型項目,開源項目,包括Linux內(nèi)核,都會使用goto來處理異常情況。
int module_init()
{
char *pdate = (char *)malloc(100);
if(pdate == NULL)
return -1;
char *pdate2 = (char *)malloc(100);
if(pdate2 == NULL)
return -1;
free(pdate);
free(pdate2);
......
}
goto實(shí)現(xiàn)代碼
int module_init()
{
char *pdate = (char *)malloc(100);
if(pdate == NULL)
goto err;
char *pdate2 = (char *)malloc(100);
if(pdate2 == NULL)
goto err;
free(pdate);
free(pdate2);
......
err://統(tǒng)一的出錯處理
if(pdate != NULL)
free(pdate);
if(pdate2!= NULL)
free(pdate2);
??return?-1;
}
if(pdate == NULL)
????goto?err1;
????...
??if(pdate2?==?NULL)
goto err2;
...
?err1:
? free(pdate);
?err2:
? free(pdate2);
??...
總結(jié):存在即合理,好壞取決于如何使用。
-END-
來源 | 二進(jìn)制人生
作者 |?二進(jìn)制人生
|?整理文章為傳播相關(guān)技術(shù),版權(quán)歸原作者所有?|
|?如有侵權(quán),請聯(lián)系刪除?|
【1】干貨:嵌入式C語言源代碼優(yōu)化方案
【2】C語言內(nèi)存泄露很嚴(yán)重,如何應(yīng)對?
【3】C語言函數(shù)指針之回調(diào)函數(shù)
【4】光刻機(jī)原理解析——光刻機(jī)到底在“刻”什么?
【5】華為繼鴻蒙OS后,即將發(fā)布國產(chǎn)編程語言!
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點(diǎn),不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!