丝袜人妻一区二区三区_少妇福利无码视频_亚洲理论片在线观看_一级毛片国产A级片

當(dāng)前位置:首頁(yè) > 娛樂(lè)星聞

goto 為什么在C語(yǔ)言中,goto這么不受待見(jiàn)?

什么是goto語(yǔ)句

Goto語(yǔ)句在C語(yǔ)言中稱為跳轉(zhuǎn)語(yǔ)句。用于無(wú)條件跳轉(zhuǎn)到其他標(biāo)簽。它將控制權(quán)轉(zhuǎn)移給程序的其他部分。

Goto語(yǔ)句很少使用,因?yàn)樗钩绦虻目勺x性和復(fù)雜性變差。

語(yǔ)法

轉(zhuǎn)到標(biāo)簽;

Goto語(yǔ)句示例

讓我們看一個(gè)簡(jiǎn)單的例子來(lái)演示如何在C語(yǔ)言中使用goto語(yǔ)句。

打開(kāi)Visual Studio創(chuàng)建一個(gè)名為:goto的項(xiàng)目,并創(chuàng)建一個(gè)源文件:goto-statement . c在這個(gè)項(xiàng)目中,代碼如下-

#include <。stdio.h>。void main { int age

你沒(méi)有資格投票);

printf("輸入你的年齡:");scanf("%d ",& amp年齡);if(年齡& lt18){ goto goto label;}else {printf("您有資格投票!");}

}

執(zhí)行上述代碼,并獲得以下結(jié)果

你沒(méi)有資格投票!輸入您的年齡:12您沒(méi)有資格投票!輸入您的年齡:18歲您有資格投票!

為什么這么冷門?

二十年前,計(jì)算機(jī)編程還處于起步階段,程序流程是由“GOTO”語(yǔ)句控制的。這種語(yǔ)句允許程序員中斷當(dāng)前代碼行,直接轉(zhuǎn)到另一個(gè)不同的代碼段。清單1是一個(gè)簡(jiǎn)單的例子。

帶功能的控制流

維基百科的解釋是GOTO語(yǔ)句一直是批評(píng)和爭(zhēng)論的對(duì)象,主要的負(fù)面影響是使用GOTO語(yǔ)句使程序可讀性變差,甚至成為可維護(hù)的“面條代碼”。從20世紀(jì)60年代到70年代,隨著結(jié)構(gòu)化編程變得越來(lái)越流行,許多計(jì)算機(jī)科學(xué)家得出結(jié)論,程序應(yīng)該總是使用被稱為“結(jié)構(gòu)化”控制流的命令,例如循環(huán)和if-then-else語(yǔ)句,而不是GOTO。

甚至在今天,許多編程風(fēng)格的編碼標(biāo)準(zhǔn)都禁止使用GOTO語(yǔ)句。GOTO語(yǔ)句的捍衛(wèi)者認(rèn)為GOTO語(yǔ)句的有限使用不會(huì)導(dǎo)致低質(zhì)量的代碼,并聲稱在很多編程語(yǔ)言中,有些任務(wù)不使用一個(gè)或多個(gè)GOTO語(yǔ)句是無(wú)法直接實(shí)現(xiàn)的。比如有限狀態(tài)自動(dòng)機(jī)的實(shí)現(xiàn),跳出嵌套循環(huán),異常處理。

對(duì)后藤最著名的批評(píng)可能是艾茲格·迪科斯徹在1968年發(fā)表的一篇題為“后藤聲明的有害理論”的論文。[2] Dijiestra認(rèn)為GOTO語(yǔ)句的無(wú)限制使用應(yīng)該從高級(jí)語(yǔ)言中廢除,因?yàn)樗狗治龊万?yàn)證程序正確性的任務(wù)變得復(fù)雜(特別是涉及循環(huán))。

另一個(gè)觀點(diǎn)出現(xiàn)在高德納的結(jié)構(gòu)化編程與GOTO語(yǔ)句[3]。本文分析了許多常見(jiàn)的編程任務(wù),然后發(fā)現(xiàn)其中一些會(huì)通過(guò)使用Goto得到最理想的結(jié)構(gòu)。

這些批評(píng)在一些編程語(yǔ)言的設(shè)計(jì)中發(fā)揮了作用。雖然Ada的設(shè)計(jì)者在20世紀(jì)70年代末就意識(shí)到了goto的批評(píng),但是這個(gè)語(yǔ)句還是被包括在內(nèi),主要是為了支持GOTO語(yǔ)句必要代碼的自動(dòng)生成。

[4]但是,作為goto語(yǔ)句目的地的標(biāo)簽必須用雙尖括號(hào)括起來(lái)(例如,

此外,還有許多不同的語(yǔ)言形式可以視為goto的變形:

受限GOTO

很多語(yǔ)言,比如C語(yǔ)言和Java,都提供了相關(guān)的控制流語(yǔ)句,比如break和continue,這些都是有效受限的goto語(yǔ)句。它們的功能是無(wú)條件跳轉(zhuǎn),但它們只能跳轉(zhuǎn)到循環(huán)塊的末尾——繼續(xù)下一個(gè)循環(huán)或結(jié)束循環(huán)(中斷)

開(kāi)關(guān)/外殼結(jié)構(gòu)

C語(yǔ)言、C++和Java中的switch語(yǔ)句高效地實(shí)現(xiàn)了多通道goto,跳轉(zhuǎn)目標(biāo)由表達(dá)式的值來(lái)選擇。

這也導(dǎo)致我們沒(méi)有理由使用goto。

鑒于這些,goto的當(dāng)前用法如下:

goto語(yǔ)句的結(jié)果:goto語(yǔ)句在C/C++等高級(jí)編程語(yǔ)言中保留,但建議不要使用或少用。在一些較新的高級(jí)編程語(yǔ)言中,如Java,不提供goto語(yǔ)句。雖然指定goto為關(guān)鍵字,但不支持其使用,使得程序簡(jiǎn)潔易讀;但是后來(lái)的c#還是支持goto語(yǔ)句。goto語(yǔ)句的一個(gè)優(yōu)點(diǎn)是可以保證程序有唯一的出口,避免嵌套過(guò)大。

另一方面,goto語(yǔ)句不是提倡的,但肯定不是禁用的。那么在什么情況下可以使用goto語(yǔ)句呢?

考慮使用goto:

直接跳出多個(gè)循環(huán);

出現(xiàn)錯(cuò)誤時(shí)清除資源;

可以提高節(jié)目清晰度的環(huán)境。

無(wú)限制使用goto破壞了清晰的程序結(jié)構(gòu),使程序可讀性變差,甚至成為可維護(hù)的“面條代碼”。經(jīng)常會(huì)帶來(lái)錯(cuò)誤或者隱患,比如可能會(huì)跳過(guò)對(duì)象的構(gòu)造、變量的初始化、重要的計(jì)算等一些語(yǔ)句。

以下關(guān)于使用goto語(yǔ)句的原則可供讀者參考。

1)使用goto語(yǔ)句只能轉(zhuǎn)到同一個(gè)函數(shù),而不能從一個(gè)函數(shù)轉(zhuǎn)到另一個(gè)函數(shù)。

2)在同一個(gè)函數(shù)中使用goto時(shí),goto的起點(diǎn)應(yīng)該是函數(shù)中一個(gè)小函數(shù)的結(jié)束,goto的目的標(biāo)簽應(yīng)該是函數(shù)中另一個(gè)小函數(shù)的開(kāi)始。

3)在復(fù)雜的執(zhí)行狀態(tài)下不允許從goto到另一個(gè)位置,比如不允許從多個(gè)嵌套循環(huán)判斷中跳出。

4)應(yīng)避免雙向跳躍。這最有可能導(dǎo)致“面條碼”。

讀過(guò)linux內(nèi)核代碼的同學(xué)應(yīng)該注意到,在linux內(nèi)核代碼中很多地方實(shí)際上都使用了goto語(yǔ)句,但是你會(huì)發(fā)現(xiàn)它的使用非常謹(jǐn)慎,基本遵循了上面的原則。

﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌

聲明:內(nèi)容是從互聯(lián)網(wǎng)上組織的,版權(quán)歸原作者所有。如果涉及到作品的版權(quán)問(wèn)題,請(qǐng)及時(shí)聯(lián)系我們,謝謝!

你和丹尼爾工程師有什么區(qū)別?

加入技術(shù)交流小組,與專家面對(duì)面交流

向組中添加愛(ài)好者助手

1.《goto 為什么在C語(yǔ)言中,goto這么不受待見(jiàn)?》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡(luò)信息知識(shí),僅代表作者本人觀點(diǎn),與本網(wǎng)站無(wú)關(guān),侵刪請(qǐng)聯(lián)系頁(yè)腳下方聯(lián)系方式。

2.《goto 為什么在C語(yǔ)言中,goto這么不受待見(jiàn)?》僅供讀者參考,本網(wǎng)站未對(duì)該內(nèi)容進(jìn)行證實(shí),對(duì)其原創(chuàng)性、真實(shí)性、完整性、及時(shí)性不作任何保證。

3.文章轉(zhuǎn)載時(shí)請(qǐng)保留本站內(nèi)容來(lái)源地址,http://f99ss.com/yule/1221792.html

上一篇

曾經(jīng)滄海難為水的出處

下一篇

元稹的妻子是誰(shuí)

酷站欣賞 酷站欣賞、酷站模板、酷站代碼

or函數(shù) Excel邏輯函數(shù)and,or和乘號(hào),加號(hào)的應(yīng)用

  • or函數(shù) Excel邏輯函數(shù)and,or和乘號(hào),加號(hào)的應(yīng)用
  • or函數(shù) Excel邏輯函數(shù)and,or和乘號(hào),加號(hào)的應(yīng)用
  • or函數(shù) Excel邏輯函數(shù)and,or和乘號(hào),加號(hào)的應(yīng)用

excel加號(hào) Excel邏輯函數(shù)and,or和乘號(hào),加號(hào)的應(yīng)用

  • excel加號(hào) Excel邏輯函數(shù)and,or和乘號(hào),加號(hào)的應(yīng)用
  • excel加號(hào) Excel邏輯函數(shù)and,or和乘號(hào),加號(hào)的應(yīng)用
  • excel加號(hào) Excel邏輯函數(shù)and,or和乘號(hào),加號(hào)的應(yīng)用

967 成員風(fēng)采|首屆主任委員單位——盈峰環(huán)境科技集團(tuán)股份有限公司 國(guó)內(nèi)領(lǐng)先的高端裝備+環(huán)境綜合服務(wù)商(股票代碼:000967)

  • 967 成員風(fēng)采|首屆主任委員單位——盈峰環(huán)境科技集團(tuán)股份有限公司 國(guó)內(nèi)領(lǐng)先的高端裝備+環(huán)境綜合服務(wù)商(股票代碼:000967)
  • 967 成員風(fēng)采|首屆主任委員單位——盈峰環(huán)境科技集團(tuán)股份有限公司 國(guó)內(nèi)領(lǐng)先的高端裝備+環(huán)境綜合服務(wù)商(股票代碼:000967)
  • 967 成員風(fēng)采|首屆主任委員單位——盈峰環(huán)境科技集團(tuán)股份有限公司 國(guó)內(nèi)領(lǐng)先的高端裝備+環(huán)境綜合服務(wù)商(股票代碼:000967)

盈峰環(huán)境股票 成員風(fēng)采|首屆主任委員單位——盈峰環(huán)境科技集團(tuán)股份有限公司 國(guó)內(nèi)領(lǐng)先的高端裝備+環(huán)境綜合服務(wù)商(股票代碼:000967)

  • 盈峰環(huán)境股票 成員風(fēng)采|首屆主任委員單位——盈峰環(huán)境科技集團(tuán)股份有限公司 國(guó)內(nèi)領(lǐng)先的高端裝備+環(huán)境綜合服務(wù)商(股票代碼:000967)
  • 盈峰環(huán)境股票 成員風(fēng)采|首屆主任委員單位——盈峰環(huán)境科技集團(tuán)股份有限公司 國(guó)內(nèi)領(lǐng)先的高端裝備+環(huán)境綜合服務(wù)商(股票代碼:000967)
  • 盈峰環(huán)境股票 成員風(fēng)采|首屆主任委員單位——盈峰環(huán)境科技集團(tuán)股份有限公司 國(guó)內(nèi)領(lǐng)先的高端裝備+環(huán)境綜合服務(wù)商(股票代碼:000967)
goahead GoAhead遠(yuǎn)程代碼執(zhí)行漏洞分析報(bào)告

goahead GoAhead遠(yuǎn)程代碼執(zhí)行漏洞分析報(bào)告

0x01簡(jiǎn)介 CVE-2017-17562是一個(gè)基于繼續(xù)前進(jìn)的網(wǎng)絡(luò)服務(wù)器 造成該漏洞的原因是GoAhead允許用戶通過(guò)參數(shù)構(gòu)造任意環(huán)境變量,這會(huì)影響所有啟用了動(dòng)態(tài)鏈接的CGI可執(zhí)行文件。當(dāng)CGI程序調(diào)用glibc動(dòng)態(tài)鏈接庫(kù)時(shí),像LD _ PRE...

即速應(yīng)用 老柳樹(shù)告訴你,小程序之即速應(yīng)用怎么收費(fèi)?

  • 即速應(yīng)用 老柳樹(shù)告訴你,小程序之即速應(yīng)用怎么收費(fèi)?
  • 即速應(yīng)用 老柳樹(shù)告訴你,小程序之即速應(yīng)用怎么收費(fèi)?
  • 即速應(yīng)用 老柳樹(shù)告訴你,小程序之即速應(yīng)用怎么收費(fèi)?
github進(jìn)不去 今天的代碼提交不上?不是你的問(wèn)題,GitHub掛了

github進(jìn)不去 今天的代碼提交不上?不是你的問(wèn)題,GitHub掛了

                ...