为什么GOTO编程实践不佳?在某些情况下使用它是有道理的。
答案 0 :(得分:4)
请注意,Djkstra写道“GOTO被认为是有害的”,而不是“GOTO被认为是致命的”。它有它的位置。不幸的是,知道何时使用它的判断来自于你在维护其他人的代码方面的经验,特别是几年前由不再在贵公司工作的人编写的代码。因此,在你有这种经历之前,最好尽可能避免转到。
答案 1 :(得分:3)
它基本上鼓励了糟糕的编码风格。见:Goto Considered Harmful [pdf]
答案 2 :(得分:2)
它可以迅速导致spaghetti code。
答案 3 :(得分:1)
这意味着您没有在程序上设计代码。
如果你正确地构建了你的时间,那么你应该很少需要转到。
很少是关键词。有时候它很有用。从这个意义上说,现在很多人只是明确地抛出并捕获异常,只是为了避免可怕的转到。
答案 4 :(得分:1)
因为代码的结构很难理解。
此
y:
// do more stuff
goto x
p:
// do stuff
// then done
goto y;
x:
// do a bunch of stuff
if (...)
goto y;
else
goto p;
done:
远不如
int main()
{
x();
}
function p()
{
if (...)
{
return;
}
}
function x()
{
if (...)
{
return;
}
else
{
p();
}
}
答案 5 :(得分:0)
GOTO会缩短您的控制流量,从而破坏您的设计并打开调试和维护恶梦的大门。
答案 6 :(得分:0)
可读性成为一个问题,逻辑流可能会因使用goto而产生意想不到的影响。
我认为.net编译器会改变一些case / switch语句以使用goto很有趣。
答案 7 :(得分:0)
在某些情况下,这是有道理的。但是,在大多数情况下使用它它认为是不好的做法,因为与使用结构化代码(如for循环和while循环)相比,它可能使代码的执行路径难以阅读。
当您查看goto或标签时,如果没有阅读或搜索标签名称的代码,您实际上并不知道去往或来自哪里。这很棘手,特别是如果goto与标签不在同一屏幕上。将其与for循环或while循环或if ...进行比较,您可以从结构(即代码的缩进)中判断出执行路径是什么。
说到这一点,它有时是有用的,特别是例如当跳出一些嵌套的for循环时,这些循环正在挖掘多维数组中的特定值。当找到正确的值时,你可以使用goto跳出for循环。