问题标签 [goto]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
9 回答
4231 浏览

c - 使用 goto 还是不使用?

这个问题可能听起来陈词滥调,但我在这里遇到了情况。

我正在尝试实现一个有限状态自动机来解析 C 中的某个字符串。当我开始编写代码时,我意识到如果我使用标签来标记不同的状态并使用 goto 从一个状态跳转到另一个视情况而定。

在这种情况下,使用标准中断和标志变量非常麻烦,并且难以跟踪状态。

什么方法更好?最重要的是,我担心这会给我的老板留下不好的印象,因为我正在实习。

0 投票
5 回答
7942 浏览

c++ - Goto out of a block:析构函数会被调用吗?

考虑以下代码:

会调用 bar 的析构函数吗?

0 投票
6 回答
562 浏览

c# - 可接受使用 GoTo?

我目前正在.Net Framework 2.0 中用C# 重写一个旧的VB6 程序(不是我的选择,这是由公司决定的)。在大多数情况下,事情进展顺利。该程序测量来自精密磨床的输入数据,并显示图形和刻度盘以显示精度。

然而,最初的程序员是机械工程师,而不是软件工程师。该程序可以工作,但是到处都有一些草率的代码。最值得注意的是,我遇到了一些 GoTo 语句。在必要的地方把东西放在一个循环中,并从中获得相同的功能是非常容易的。

然而,我在原始代码中遇到了一个案例,看起来 GoTo 所做的不仅仅是模拟循环。它有几个不同的退出条件。它看起来像这样(不是实际的代码,只是我为了演示而编造的一些简短的东西):

VB6 代码

实际代码的条件可能比这要少一些,但基本思想是有一些不同的事情会导致它自己循环。有没有一种好方法可以为这种情况编写循环,或者在这种情况下 goto 语句是可以接受的?(诚​​然,非 goto 解决方案将是首选)。

感谢您的时间和考虑。

注意:我尝试使用带中断的 while(true) 循环;声明,但它导致程序陷入无限循环并锁定。是否更建议编写一个包含多个条件(带有和/或等)的长while循环?

0 投票
10 回答
1835 浏览

c# - 这是goto表达吗?

以下代码是消息批处理例程的概念证明。我是否goto像瘟疫一样避免并重写这段代码?还是您认为这goto是完成此任务的一种表达方式?

如果您要重写,请发布一些代码...

0 投票
9 回答
60400 浏览

c++ - 使用“break”打破“for”循环被认为是有害的?

几天前我开始了一个快速的开源项目,当一些小伙伴在 svn 上查看代码时,其中一个告诉我,break在循环中使用语句for被认为是有害的,不应该这样做。

不过,他补充说,我会在 Linux 内核源代码的循环中找到几种break语句for,但这只是因为只有 Linus Torvalds 和 Chuck Norris 被允许使用它,而没有其他人被允许使用。

你怎么看?我认为在循环break内使用没有问题。for在我看来,模拟break使用布尔变量或类似变量的行为会增加很多不必要的开销,并使代码变得不那么简单。

另外,没有与 比较的余地goto,因为break不能随意改变程序的流程从一个点到另一个点goto

0 投票
11 回答
2899 浏览

php - GOTO 和 THROW 的区别?

最近很多人指责我只提到一个词——“goto”。
这让我想知道,为什么它被认为是一个如此讨厌的词。
我知道之前关于该主题的几次讨论,但这并不能说服我 -有些答案只是说“这很糟糕”,甚至没有试图解释,有些还带来了与 PHP、IMO 等脚本语言无关的原因

无论如何,我要问一个非常特别的问题:
让我们比较gotothrow陈述。
在我看来,两者都做同样的事情:避免基于某些条件执行某些代码部分。
如果是这样 - 是否throw有与 goto 相同的缺点?(如果有的话)?
如果不是 - 那就是区别。

任何有足够经验的人,谁能说出以下两个代码片段的代码结构之间的基本概念差异?
关于这些非常代码片段,而不是“理论上”或“一般”或“这是一个不错的 XKCD 漫画!”。
为什么第一个被认为是聪明的,而后一个被认为是最致命的罪恶?

请注意,我知道 throw在制作意大利面条时更加强大和灵活。这对我来说没有主要区别。这是使用问题,而不是概念问题。

编辑
很多人告诉我,第一个示例应该更新使用。
原因:异常应该只用于处理错误,而不是实现业务逻辑。
看起来很明智。

因此,停止无用代码执行的唯一方法是goto(更不用说一些替代品,例如while,return等,它们是相同的,但更难实现)?

0 投票
14 回答
1207 浏览

c++ - C++ , is this goto statement warranted?

I have changed title slightly because I thought this is more appropriate question.

Would you refactor it (seems like legitimate use of goto) ? If, how would you refactor the following code to remove go to statement?

complete statement

thank you

after have seen preference of most, I decided to go with flag, but with Mr. York comment.

Thank you everybody

0 投票
2 回答
512 浏览

perl - 如何在 Perl 的上层范围内本地化变量?

AUTOLOAD在开发使用或其他子例程调度技术的 Perl 模块时,我曾多次遇到以下模式:

这工作正常,并caller看到正确的范围。

现在我想做的是$_$self执行&$code. 这将是这样的:

由于性能和依赖性问题,涉及包装的解决方案caller是不可接受的。所以这似乎排除了第二种选择。

回到第一个,在 期间防止新值$_超出范围的唯一方法goto是不本地化更改(不是可行的选项)或实施某种uplevel_localor goto_with_local

我玩过各种涉及PadWalker, Sub::Uplevel,和其他的排列Scope::UpperB::Hooks::EndOfScope但还没有想出一个健壮的解决方案,可以$_在正确的时间清理,并且不换行caller

有没有人找到适用于这种情况的模式?

(SO 问题:How can I localize Perl variables in a different stack frame?是相关的,但保留caller不是必需的,最终答案是使用不同的方法,因此该解决方案在这种情况下没有帮助)

0 投票
0 回答
1895 浏览

language-agnostic - 为什么使用 goto 不好?

可能重复:
GOTO 仍然被认为是有害的?

我刚刚遇到一些 C# 代码,其中包含 goto 语句(我什至不知道 C# 支持)。我只依稀记得在我的一门大学课程中听说过 goto 语句。我似乎记得我的教授说永远不应该使用它,但我不记得为什么。

我应该考虑重写这段代码还是这不太可能导致问题?

0 投票
6 回答
106828 浏览

c++ - 使用 goto 有什么问题?

可能的重复:
为什么使用 goto 不好?
GOTO 仍然被认为是有害的?

我正在通过 xkcd 随机浏览并看到了这个(如果几年前还阅读了一些关于它们的负面文本):
你的慢速连接很糟糕,找一个更快的来看看这张图片
它实际上有什么问题?那么为什么 goto 在 C++ 中甚至是可能的呢?

为什么我应该使用它们?