03.03 為什麼在彙編語言中需大量使用跳轉指令,而在C語言中卻儘量避免使用goto語句呢?

宙憒4LTn3495


C語言中儘量避免的不是goto,而是無條件使用goto。

彙編語言中是有大量跳轉指令,但是那些不是無條件跳轉,前面肯定都要有ifne,ifeq這些條件判斷的。注意,在彙編語言的使用中,雖然有jump這些,但是也不是就建議無條件的使用這些跳轉指令,肯定是要配合一定條件判斷來使用的。


經常編碼的人都知道,像if、while break、for這些都是包含跳轉功能的,只不過是有一定條件才跳轉。要是彙編真的沒有jump這些跳轉指令了,C語言就連if、while break、for這些都沒法實現了。


所以,彙編有跳轉很正常,是用來實現程序控制邏輯的必備元素。C語言要避免的是無條件濫用goto。


中外古今說說


彙編語言說是語言,其本質是機器指令的符號化,其詞彙與機器指令一一對應,用匯編語言寫程序需熟悉硬件結構,則可最大程度利用和發揮硬件性能,跳轉是多次重複使用空間的一種方法,這樣既可以節省存儲單元,也可提高效率。這對於依賴硬件的應用很有必要。C語言是高級語言,更接近人們的自然語言,編寫程序時按人的思維邏輯順序描述,後面的處理不用考慮前面的空間利用,所以很少跳轉,若跳轉多了反而容易破壞敘述的邏輯關係。當然高級語言也是要變換成機器指令的,但這是編譯軟件去完成的。


古老農民


程序中指令流中經常會使用到條件選擇機能,在彙編語言中唯一實現選擇執行代碼的指令是跳轉。

作為結構化語言,選擇執行代碼的途徑很多,機能的模塊化(函數調用return),條件選則(if,switch),循環(for)等,這些指令的使用不僅方便書寫而且使得編碼的邏輯清晰,可讀性高。而使用簡單的無條件跳轉則大大降低了程序的可讀性,宜儘量避免。


MosquitoVon


跳轉是剛需。任何編程語言的邏輯上都需要跳轉。彙編語言只是反映了這個本質的要求。素質不高的程序員。寫出來的跳轉有可能就成了死循環。用c語言編程的時候。c語言是高級語言。有很多替代方法,避免了直接跳轉。用匯編語言的時候,就沒有了c語言的便利。程序員就必須謹小慎微的寫好邏輯,避免死循環,直接用跳轉。


木匠49743941


彙編和c比較,彙編語言更加低級和原始,c語言相對高級人性化。

彙編語言沒有if和for結構,沒有continue和break語句,只能用最原始的跳轉,來做分支選擇、循環退出這樣的事情。

c語言的結構豐富起來了,即使不用goto,也完全沒有跳轉方面的問題。能避免就儘量避免,有更好的選擇,為什麼還去使用原始的被淘汰的呢?

我習慣有高級的特性就儘量用高級的特性,越多的關鍵字只會增加智力負擔,尤其是對有選擇困難的同學。


php設計模式


goto可以往後goto,儘量不要往前goto。使用goto不當,代碼閱讀起來很費勁,後期維護成本太高,容易出錯,所以一般不推薦使用。

使用goto的場景主要有跳出多重循環,統一處理異常返回,成功返回等。千萬不要往前goto,切記切記。

跳轉指令只有有if,while等邏輯控制的,都會彙編成跳轉指令。


分享到:


相關文章: