欢迎光临

木子屋

标题: call和goto的异同点

作者: dnawo

日期: 2008-04-25 09:53 PM

分类: 操作系统

内容: 复制内容到剪贴板 程序代码@echo off
echo 早上好!
goto :noon
echo 该睡觉了!&pause>nul
:noon
echo 中午好!
:night
echo 晚上好!
pause>nul
结果为：
引用内容早上好!
中午好!
晚上好!
[按任意键退出]
复制内容到剪贴板 程序代码@echo off
echo 早上好!
call :noon
echo 该睡觉了!&pause>nul
:noon
echo 中午好!
:night
echo 晚上好!
pause>nul
结果为：
引用内容早上好!
中午好!
晚上好!
[按任意键]
该睡觉了!
[按任意键]
中午好!
晚上好!
[按任意键退出]
从上边两个例子我们已经可以很明白的看出call和goto的异同点了：
相同点：call和goto都可以将流程跳转到标签处。
不同点：goto将流程跳转到标签处后，程序从标签处开始执行到结束，整个流程执行完毕；call将流程跳转到标签处后，程序从标签处开始执行到结束[1]，然后会跳转回执行call的下一条语句，直到整个流程执行完毕；所以call并不会像goto那样打乱了流程，它只是中断了当前流程，但仍保证整个流程按原顺序进行。
[1]在第二个例子中我们可以在标签后适当的地方调用goto :eof，使流程提前结束，提前将流程转移call的下一条语句：
复制内容到剪贴板 程序代码@echo off
echo 早上好!
call :noon
echo 该睡觉了!&@pause>nul
:noon
echo 中午好!
goto :eof
:night
echo 晚上好!
goto :eof
pause>nul
执行结果已和例二有所不同，先显示：
引用内容早上好!
中午好!
该睡觉了!
按任意键后接着显示"中午好!"，到goto :eof后退出！
很显然，如果在例一中加入goto :eof则只是提前结束了流程。

+ 查看当前日志评论 (0)

登录

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 0.643 ms

返回

标题: call和goto的异同点

你没有权限发表评论

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 0.643 ms

返回

暂无评论

返回

────────────

木子屋

PJBlog3 v3.2.9.518 Inside.

Processed In 0.660 ms

返回