Questions tagged «goto»

11
“ goto”语句导致什么样的错误?有历史上重要的例子吗?
我知道,除了打破嵌套在循环中的循环之外,其他方法都是这样。该goto语句是易于出错的编程风格,因此一直被人们回避和谴责。 替代文字: “尼尔·斯蒂芬森(Neal Stephenson)认为给他的唱片公司定名为“ dengo”很可爱”, 请参见以下原始漫画:http://xkcd.com/292/ 因为我很早就学到了 对于什么类型的错误goto实际上导致什么,我真的没有任何见识或经验。那么我们在这里谈论什么: 不稳定吗? 无法维护或无法读取的代码? 安全漏洞? 还有其他东西吗? 实际上,“ goto”语句会导致哪种错误?有历史上重要的例子吗?

12
这是C语言中goto的一个不错的用例吗?
我真的很犹豫要问这个问题,因为我不想“征求辩论,争论,民意测验或扩展讨论”,但是我是C语言的新手,并且希望对语言使用的常见模式有更多了解。 我最近听到对该goto命令有些反感,但最近也发现了一个不错的用例。 像这样的代码: error = function_that_could_fail_1(); if (!error) { error = function_that_could_fail_2(); if (!error) { error = function_that_could_fail_3(); ...to the n-th tab level! } else { // deal with error, clean up, and return error code } } else { // deal with error, clean up, and return error code …

12
避免使用“ goto”伏都教?
我有一个switch可以处理几种情况的结构。对进行switch操作会enum通过组合值引起重复代码的问题: // All possible combinations of One - Eight. public enum ExampleEnum { One, Two, TwoOne, Three, ThreeOne, ThreeTwo, ThreeOneTwo, Four, FourOne, FourTwo, FourThree, FourOneTwo, FourOneThree, FourTwoThree, FourOneTwoThree // ETC. } 当前,该switch结构分别处理每个值: // All possible combinations of One - Eight. switch (enumValue) { case One: DrawOne; break; case Two: DrawTwo; …

10
将goto用于这些明显且相关的情况下,它有什么不好?
我一直都知道那goto是不好的事情,被锁在一个地下室,永远不会永远变好,但是今天我遇到了一个代码示例,使用起来很合理goto。 我有一个IP,需要检查它是否在IP列表中,然后继续执行代码,否则引发异常。 <?php $ip = '192.168.1.5'; $ips = [ '192.168.1.3', '192.168.1.4', '192.168.1.5', ]; foreach ($ips as $i) { if ($ip === $i) { goto allowed; } } throw new Exception('Not allowed'); allowed: ... 如果我不使用,goto那么我必须使用一些变量,例如 $allowed = false; foreach ($ips as $i) { if ($ip === $i) { $allowed = true; …
40 php  goto 


7
这证明goto语句合理吗?
一秒钟前,我遇到了这个问题,我从中提出了一些建议:“ break n”结构有名称吗? 对于人们来说,这是一种不必要的复杂方法,它可以指示程序摆脱双重嵌套的for循环: for (i = 0; i < 10; i++) { bool broken = false; for (j = 10; j > 0; j--) { if (j == i) { broken = true; break; } } if (broken) break; } 我知道教科书喜欢说goto语句是魔鬼,而我本人一点也不喜欢它们,但这是否有例外的理由? 我正在寻找与n嵌套for循环有关的答案。 注意:无论您回答是,否还是介于两者之间,都不欢迎完全封闭的答案。特别是如果答案是否定的,请提供一个合理的正当理由(无论如何,这与Stack Exchange法规相距不远)。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.