共找到3條詞條名為goto的結果 展開

goto

高級編程語言

其中標號需要申請,在對應的過程的申請的位置寫label <標號>;其中,標號必須為byte型整數。

在該段落內還需要有<標號>:表示將要轉向的方向。

應用舉例


C語言

Sample:(2005MSDN上的例子)
#include
int main()
{
int i, j;
for ( i = 0; i < 10; i++ )
{
printf( "Outer loop executing. i = %d\n", i );
for ( j = 0; j < 3; j++ )
{
printf( " Inner loop executing. j = %d\n", j );
if ( i == 5 )
goto stop;
}
}
printf( "Loop exited. i = %d\n", i );
stop: printf( "Jumped to stop. i = %d\n", i );//stop: 就是標籤
return 0;
}

在Pascal中

goto <標號>;
其中標號需要申請,在對應的過程的申請的位置寫label <標號>;其中,標號必須為byte型整數。
在該段落內還需要有<標號>:表示將要轉向的方向。

發展歷程


60年代中期以後,計算機硬體技術日益進步,計算的存貯容量、運算速度和可靠性明顯提高,生產硬體的成本不斷降低。計算機價格的下跌為它的廣泛應用創造了極好的條件。在這種形勢下,迫切要求計算機軟體也能與之相適應。因而,一些開發大型軟體系統的要求提了出來。然而軟體技術的進步一直未能滿足形勢發展的需要,在大型軟體的開發過程中出現了複雜程度高、研製周期長、正確性難以保證的三大難題。遇到的問題找不到解決辦法,致使問題堆積起來,形成了人們難以控制的局面,出現了所謂的“軟體危機”。為了克服這一危機,一方面需要對程序設計方法、程序的正確性和軟體的可靠性等問題進行系列的研究;另一方面,也需要對軟體的編製、測試、維護和管理的方法進行研究,從而產生了程序設計方法學。

各方看法


有害

1968年,E·W·代克斯特拉首先提出“GOTO語句是有害的”論點,向傳統程序設計方法提出了挑戰,從而引起了人們對程序設計方法討論的普遍重視。

爭論

在60年代末和70年代初,關於GOTO語句的用法的爭論比較激烈。主張從高級程序語言中去掉GOTO語句的人認為,GOTO語句是對程序結構影響最大的一種有害的語句,他們的主要理由是:GOTO語句使程序的靜態結構和動態結構不一致,從而使程序難以理解,難以查錯。去掉GOTO語句后,可直接從程序結構上反映程序運行的過程。這樣,不僅使程序結構清晰,便於理解,便於查錯,而且也有利於程序的正確性證明。
持反對意見的人認為,GOTO語句使用起來比較靈活,而且有些情形能提高程序的效率。若完全刪去GOTO語句,有些情形反而會使程序過於複雜,增加一些不必要的計算量。

解決方法

1974年,D·E·克努斯對於GOTO語句爭論作了全面公正的評述,其基本觀點是:不加限制地使用GOTO語句,特別是使用往回跳的GOTO語句,會使程序結構難於理解,在這種情形,應盡量避免使用GOTO語句。但在另外一些情況下,為了提高程序的效率,同時又不至於破壞程序的良好結構,有控制地使用一些GOTO語句也是必要的。用他的話來說就是:“在有些情形,我主張刪掉GOTO語句;在另外一些情形,則主張引進GOTO語句。”從此,使這場長達10年之久的爭論得以平息。
後來,G·加科皮尼和C·波姆從理論上證明了:任何程序都可以用順序、分支和重複結構表示出來。這個結論表明,從高級程序語言中去掉GOTO語句並不影響高級程序語言的編程能力,而且編寫的程序的結構更加清晰。

結果

在C/C++等高級編程語言中保留了goto語句,但被建議不用或少用。在一些更新的高級編程語言,如Java不提供goto語句,它雖然指定goto作為關鍵字,但不支持它的使用,使程序簡潔易讀;儘管如此後來的c#還是支持goto語句的,goto語句一個好處就是可以保證程序存在唯一的出口,避免了過於龐大的if嵌套。

注意問題


goto語句不能跨越變數的定義向後跳轉:
//......
goto end;
int ix=10;
end:
ix=42;//會出現ix未定義的情形
而向前跳過已經執行的變數定義語句是合法的。因為向前跳回到一個變數定義之前,系統在撤銷這個變數,然後重新創建它:
//..........
begin:
int sz=get_size();
if(sz<=0) goto begin;
執行goto語句時,首先撤銷變數sz,然後程序的控制流程跳轉到帶begin:標號的語句繼續執行,再次重新創建和初始化變數sz。