本文目錄一覽:
- 1、c語言goto語句是什麼意思
- 2、為什麼C語言中的go to 語句老師說要小心使用?注意的地方是什麼?
- 3、c語言goto怎麼回事
- 4、為什麼C語言中不提倡使用goto語句?僅僅是因為可讀性差嗎?
- 5、關於C語言中, goto語句的理解和應用程度。
- 6、c語言為什麼不能用goto寫循環
c語言goto語句是什麼意思
goto是程序跳轉語句。goto後面接一個標號,標號名字自己起。
比如
p1:a=a+1;
b=b+1;
goto p1;
程序執行到goto p1;就從a=a+1;開始執行。
為什麼C語言中的go to 語句老師說要小心使用?注意的地方是什麼?
goto語句稱為無條件轉移語句,通常與條件語句配合使用。可用來實現條件轉移, 構成循環,跳出循環體等功能。但是,在結構化程序設計中一般不主張使用goto語句, 以免造成程序流程的混亂,使理解和調試程序都產生困難。而且,goto語句一般可以用其他語句來代替。
當然,goto語句也有其優勢,例如可以用goto語句一次性跳出多重循環,而不需要使用多個break語句一步一步地跳出,從而使代碼更為簡潔。
在C語言中使用goto語句的注意事項如下:
使用goto語句只能轉移到到同一函數內,而不能從一個函數里轉移到另外一個函數里。
使用goto語句在同一函數內進行轉移時,轉移的起點應是函數內一段小功能的結束處,goto的目的label處應是函數內另外一段小功能的開始處。
不能從一段複雜的執行狀態中的位置goto到另外一個位置,比如,從多重嵌套的循環判斷中跳出去就是不允許的。
應該避免向兩個方向跳轉。這樣最容易導致「麵條代碼」。
所以說,goto語句要小心使用。
c語言goto怎麼回事
goto語句是C語言中的跳轉命令。使用方法:
goto label;
label為本函數中聲明的一個標號,執行goto後,跳轉到該標號指定行處繼續執行。
一般來說,很多書都不推薦使用goto,不過很多書都給了一些很牽強的理由。在某些情況下需要使用goto,比如跳出多重循環。
但是goto不能濫用,主要缺點有這幾個:①影響程序可讀性 ②影響程序執行效率。分支語句會對指令預取造成很大的影響,而且跳轉的位置有時分支預測單元可能預測不到。常用的跳轉語句如if、for等,對這點影響都很小,但是goto不同,一個較長的跳轉可能給指令預取單元帶來很大的麻煩。
所以說,不要濫用goto,除非你確定它不會給你造成麻煩。
為什麼C語言中不提倡使用goto語句?僅僅是因為可讀性差嗎?
C語言是面向過程的語言,在編程的時候,一般會遵從結構化程序設計的要求。
結構化程序設計要求模塊單入口,單出口,而goto語句則容易破壞這種結構,所以不建議使用。
但這並不是強制的,只是一種建議,有時goto可以大幅度簡化代碼量,在保證代碼足夠清晰明確下,偶爾使用也是可以的。
關於C語言中, goto語句的理解和應用程度。
我表示,我編程已經8年了,沒用過一次goto
在某些特殊場合可能會用到,不過這既是不推薦的,一般也是沒必要的
有些時候這個能提高運行效率,不過多數時候還是安全性更重要些.
c語言為什麼不能用goto寫循環
goto是一個有爭議的語句,許多書本建議少用或不用它,是因為它是無條件跳轉目標,不符合結構化程序設計的思想,還有就是從程序書寫規範和易讀角度說,經常使用goto語句會使代碼混亂(你沒事跳轉來跳轉去 ,會搞得整個程序,只有你自己看得懂,也許跳個十幾次之後,你自己也會看不懂)。
goto語句不是不可以用,是不可濫用,要慎用。goto至少有一處可顯神通,它能從多重循環中咻地一下子跳到外面,……就像房子著火了,來不及從樓梯一級一級往下走,可從窗口跳出火坑。……」(《高質量C++/C編程指南》第32頁)
goto只是簡單的跳轉語句,並沒有錯,但跳轉之前可以做限定 ,if goto 這兩個可以一起用,但盡量是少用,如果避免過多的嵌套循環,可以使用break和continue來完成循環退出 。
goto的目標是一個標號,這個標號的起名倒有點意思,因為標號只用於goto,所以它的名字可以與任何變數名以及其它標識符一樣而不產生重名。以前的程序是帶行號的,所以就「goto 行號」,現在程序不帶行號了,但是允許在任何地方加標號。編譯器在碰到它們的時候,大概就是憑其後頭的冒號來判斷這個名字不需要檢驗合法性。
下面舉例說明:
#include stdio.h
void main()
{
int n, m;
/*這個循環輸出1 2 3 4, 在n是5的時候循環退出*/
for ( n = 1; n = 10; n ++ )
{
if ( n == 5 )
break;
printf( ” %d”, n );
}
printf( “\n” );
/*這個循環輸出1 2 3 4 6 7*/
for ( m = 1; m = 10; m ++ )
{
/*在m是5的時候沒有執行當次循環的其他語句,所以未輸出5*/
if ( m == 5 )
continue;
/*在m是8的時候循環跳轉到RET處,連End都不會輸出,如果是break,還能輸出End*/
if ( m == 8 )
{
goto RET;
}
printf(” %d”,m);
}
printf (“End”);
RET:
return;
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/288860.html