批处理 - CALL和GOTO有什么区别?

Cra*_*edd 5 goto batch-file call

我理解代码中的标签链接,但有什么区别?

@echo off
:top
echo I love StackOverflow.com
goto :top
Run Code Online (Sandbox Code Playgroud)
@echo off
:top
echo I love StackOverflow.com
call :top
Run Code Online (Sandbox Code Playgroud)

先感谢您!

D G*_*D G 13

你给出的例子并没有真正显示出两者之间的区别.

"goto" - 转到标签.

"call" - 转到标签,然后在代码完成后返回给调用者.

在您的示例中,由于您的代码永远不会完成,因此它永远不会返回给调用者.

您可能会看到的唯一区别是,"调用"版本最终会在"返回"的列表变得如此之大,直到"填满"内存时崩溃.

要了解如何正确使用call命令:http://ss64.com/nt/call.html


Mag*_*goo 5

在你的例子中,很少 - 除了call版本最终会崩溃。

goto将执行转移到指定的标签;从那时起继续执行。

call也将执行转移到标签,但当处理到达exitor时end-of-physical-file,执行会直接转移回该call指令之后的指令。

call还允许传递参数。就作为 的目标的子例程而言call,它%1...是由 提供的参数call,而不是作为批处理过程的命令行参数提供的。

您可以使用外部批处理或可执行文件,并且在call调用例程结束时,执行将使用. 将简单地执行目标,并完全忘记它在原始批次中的位置callgoto

  • CALL 还为 SETLOCAL / ENDLOCAL 命令建立了新的范围。ENDLOCAL 无法释放 CALL 之前定义的变量。此外,从 CALL 返回时存在隐式 ENDLOCAL。 (2认同)