我理解这两者都是指向代码标签,但它们有什么区别?
@echo off
:top
echo I love StackOverflow.com
goto :top
@echo off
:top
echo I love StackOverflow.com
call :top
提前感谢您!
我理解这两者都是指向代码标签,但它们有什么区别?
@echo off
:top
echo I love StackOverflow.com
goto :top
@echo off
:top
echo I love StackOverflow.com
call :top
提前感谢您!
你提供的例子并不能真正展示这两者之间的区别。
goto
- 跳转到相应的标签。call
- 跳转到相应的标签,当代码执行完毕后会返回调用者。在你的例子中,由于你的代码从未执行完成,所以它永远不会返回给调用者。
你可能唯一看到的区别是,call
版本在“返回位置列表”变得如此大,直到“填满”内存时最终会崩溃。
要了解如何正确使用 call 命令,请参考:http://ss64.com/nt/call.html
call
版本最终会崩溃外,几乎没有什么区别。
goto
将执行转移到指定的标签;从那个点继续执行。
call
也将执行转移到标签,但是当处理到达exit
或end-of-physical-file
时,执行将转移到call
指令直接后面的指令。
call
还允许传递参数。对于作为call
目标的子例程,它的%1...
是由call
提供的参数,而不是作为命令行参数提供给批处理过程的。call
外部批处理程序或可执行文件,在调用程序结束时,执行将恢复到call
后面的指令。goto
将仅执行目标,并完全忘记在原始批处理程序中的位置。使用call
关键字会有一个返回值:
for /l %%i in (1,2,10) do call :process %%i
pause
Exit /b
:process
echo subroutine - %1
goto /?
或者call /?
吗? - aschipfl