首页 / C# / c# – GOTO与DO WHILE差异
c# – GOTO与DO WHILE差异
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – GOTO与DO WHILE差异,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1776字,纯文字阅读大概需要3分钟。
内容图文
![c# – GOTO与DO WHILE差异](/upload/InfoBanner/zyjiaocheng/759/731c7fca373240dbad53d7dc0fb17b33.jpg)
以下2个C#片段之间的执行存在差异吗?
do
{
Console.WriteLine(x.ToString());
++x;
}
while (x < 7);
和
label:
{
Console.WriteLine(x.ToString());
++x;
}
if (x < 7) goto label;
我想弄清楚为什么这么糟糕.
谢谢.
编辑:如果我添加括号,片段非常相似.
EDIT2:在Visual Studio中,我点击了Go to Disassembly,我得到以下代码:
do
{
00000037 nop
Console.WriteLine(x.ToString());
00000038 lea ecx,[ebp-40h]
0000003b call 63129C98
00000040 mov dword ptr [ebp-48h],eax
00000043 mov ecx,dword ptr [ebp-48h]
00000046 call 63148168
0000004b nop
++x;
0000004c inc dword ptr [ebp-40h]
}
0000004f nop
while (x < 7);
00000050 cmp dword ptr [ebp-40h],7
00000054 setl al
00000057 movzx eax,al
0000005a mov dword ptr [ebp-44h],eax
0000005d cmp dword ptr [ebp-44h],0
00000061 jne 00000037
和
label:
{
Console.WriteLine(x.ToString());
00000069 lea ecx,[ebp-40h]
0000006c call 63129C98
00000071 mov dword ptr [ebp-4Ch],eax
00000074 mov ecx,dword ptr [ebp-4Ch]
00000077 call 63148168
0000007c nop
++x;
0000007d inc dword ptr [ebp-40h]
}
00000080 nop
if (x < 7) goto label;
00000081 cmp dword ptr [ebp-40h],7
00000085 setge al
00000088 movzx eax,al
0000008b mov dword ptr [ebp-44h],eax
0000008e cmp dword ptr [ebp-44h],0
00000092 jne 00000097
00000094 nop
00000095 jmp 00000068
区别在于无条件跳跃.
解决方法:
不,我甚至认为有一段时间在后面实施.
使用goto的不好之处在于它鼓励在代码中来回传递(也称为“意大利面条代码”:它是一团糟).它使您的代码极难阅读,调试和分析,并且它引入了错误,因为您无法真正理解正在发生的事情.
与之相关的好处是,您可以理解它,并且编译器可以理解它,因此它可以为您提供很好的警告.
内容总结
以上是互联网集市为您收集整理的c# – GOTO与DO WHILE差异全部内容,希望文章能够帮你解决c# – GOTO与DO WHILE差异所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。