Posted on 2010-01-04 11:13
Hero 閱讀(1123)
評論(0) 編輯 收藏 引用 所屬分類:
DOS
CODE: [Copy to clipboard]
@echo off
echo 早上好!
goto :noon
echo 該睡覺了!&pause>nul
:noon
echo 中午好!
:night
echo 晚上好!
pause>nul
執行結果:
CODE: [Copy to clipboard]
@echo off
echo 早上好!
call :noon
echo 該睡覺了!&pause>nul
:noon
echo 中午好!
:night
echo 晚上好!
pause>nul
執行結果:
Quote: |
早上好! 中午好! 晚上好! [按任意鍵] 該睡覺了! [按任意鍵] 中午好! 晚上好! [按任意鍵退出] |
|
從上邊兩個例子我們已經可以很明白的看出call和goto的異同點了:
相同點:call和goto都可以將流程跳轉到標簽處。
不同點:goto將流程跳轉到標簽處后,程序從標簽處開始執行到結束,整個流程執行完畢;call將流程跳轉到標簽處后,程序從標簽處開始執行到結束[1],然后會跳轉回執行call的下一條語句,直到整個流程執行完畢;所以call并不會像goto那樣打亂了流程,它只是中斷了當前流程,但仍保證整個流程按原順序進行。
[1]在第二個例子中我們可以在標簽后適當的地方調用goto :eof,使流程提前結束,提前將流程轉移call的下一條語句:
CODE: [Copy to clipboard]
@echo off
echo 早上好!
call :noon
echo 該睡覺了!&pause>nul
:noon
echo 中午好!
goto :eof
:night
echo 晚上好!
goto :eof
pause>nul
執行結果已和例二有所不同,先顯示:
按任意鍵后接著顯示"中午好!",到goto :eof后退出!
很顯然,如果在例一中加入goto :eof則只是提前結束了流程。