C語言關鍵字 – 浪裡白條:goto

來源:互聯網
上載者:User

++++++++++++++++++++++++++++++++++++++++++

《C語言深入理解系列 - 浪裡白條:goto》

查看其它博文請關注原創作者。

本文系本站原創,歡迎轉載! 轉載請註明出處:

http://blog.csdn.net/mr_raptor/article/details/7211005 

++++++++++++++++++++++++++++++++++++++++++

 

 浪裡白條:goto

描述:在所有的程式設計語言裡,恐怕沒有哪個關鍵字可以和goto相比,它可以指哪打哪,完全不用去顧忌編碼規則,在代碼世界裡遊刃有餘,混得代碼海洋裡的浪裡白條美譽,也正是由於其放蕩不羈的特性,被編碼規則牢牢劃死在編程準則不允許之首。

作用:正如其名,go to everywhere,它可以在代碼邏輯中任意穿梭,只要給我定義一個靶心(標籤),我就可以打破邏輯直接到達,如下面樣本。

if(網卡未初始化){<br />// 初始化網卡<br />if(初始化出錯)<br />goto error;<br />}</p><p>char * buf = (char*)malloc(20);<br />if(接受網卡資料){<br />if(資料較驗錯誤)<br />goto checkNumError;<br /> //寫入到buf中<br />}else{<br />goto timeupError;<br />}</p><p>checkNumError:<br />// 處理較驗出錯<br />goto freeMem;<br />timeupError:<br />// 處理逾時出錯<br />freeMem:<br />free(buf);<br />error:<br /> // 其它善後處理<br />

通過上面的代碼可以看出,使用goto關鍵字,程式邏輯非常的自由,網卡初始化出錯時,直接跳到23行執行,第9行,資料較驗出錯,直接跳到16行,然後處理完後跳到21行,執行buf的記憶體釋放。雖然可以看到代碼邏輯很自由,但是還是會發現有點混亂,如果程式員沒有足夠的代碼經驗,很容易出現邏輯問題,因此很多派系的編碼規範中規定,禁止或盡量不使用goto關鍵字,很容易讓程式員範迷糊。但是在很多場合下,使用goto關鍵字可以更方便快捷,比如:錯誤處理時,其實上面的例子就是一個簡單的驅動錯誤處理例子。

使用goto時,請注意:

  •  標籤後面的代碼會被依次執行,如上述代碼18行,如果不使用goto,那麼就會去執行19行後面的錯誤處理代碼了。
  • 在含有大量goto語句時,應該按照“先跳後出”的準則去設計邏輯,因為通常在標籤處要做一些前面邏輯處理,越在前面聲明的變數或記憶體空間,越應該在最後去釋放,如前面的例子。其大概邏輯如下比如:
goto error:<br />……<br />goto checkNumError:<br />……<br />goto timeupError:<br />……</p><p>timeupError:<br />……<br />checkNumError:<br />……<br />error:<br />……</p><p>

++++++++++++++++++++++++++++++++++++++++++

《C語言深入理解系列 - 浪裡白條:goto》

查看其它博文請關注原創作者。

本文系本站原創,歡迎轉載! 轉載請註明出處:

http://blog.csdn.net/mr_raptor/article/details/7211005 

++++++++++++++++++++++++++++++++++++++++++

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.