goto相关内容
我一直觉得,如果可能的话,永远不要使用goto。 然而,前几天在仔细阅读libavcodec(它是用C语言编写的)时,我惊讶地注意到它被多次使用。 在支持循环和函数的语言中使用goto是否有利?若有,原因为何?请提供一个具体的例子,清楚地证明使用goto是合理的。 推荐答案 我知道使用“goto”语句有几个原因(有些人已经谈过了): 干净退出函数 通常在函数中,
..
我们正在为高级编译语言编写字节码,经过一些分析和优化,很明显当前最大的性能开销是我们用来跳转到字节的 switch 语句-代码案例. 我们调查了提取每个案例标签的地址并将其存储在字节码流本身中,而不是我们通常打开的指令 ID.如果这样做,我们可以跳过跳转表,直接跳转到当前执行指令的代码位置.这在 GCC 中非常有效,但是,MSVC 似乎不支持这样的功能. 我们尝试使用内联汇编来获取标签
..
假设这些代码在g++中编译: #include int main() {整数=0;转到退出;int *b = NULL;出口:返回0;} g++ 会抛出错误: goto_test.c:10:1: error: jump to label ‘exit’ [-fpermissive]goto_test.c:6:10:错误:从这里 [-fpermissive]goto_test
..
我对 GOTO 命令和附属标签有疑问. 事实:给定文件夹中的一堆文件(它们是日志错误),我需要打开它们并检查它们是否包含特定字符串.如果是,则从文件名中删除一些字符(“_"最后出现之后的所有字符,包括它自己)并执行其他操作. 为了切断字符,我以循环方式使用 GOTO 命令,因为我发现它在这里描述:http://www.robvanderwoude.com/battech_while_l
..
来自 VBA 帮助文件: GoTo 语句 无条件地分支到过程中的指定行. 语法 转到 _行_ 必需的 line 参数可以是任何行标签或行号. 备注 GoTo 只能分支到过程中出现的行. 我的问题是,如何使用 GoTo 跳转到行号?(我知道如何跳转到标签.) (注意:出于好奇,我问这个问题.我无意以这种方式实际使用 GoTo.) 解决方案
..
我正在编写一个 C 编译器,当我谈到 switch 语句的实现时,一个约束让我很困惑.标准的第 6.8.4.2p2 节状态: 如果 switch 语句在其中包含关联的 case 或默认标签具有可变修改类型的标识符的范围,整个switch 语句应在该标识符的范围内. 带脚注: 也就是说,声明要么在 switch 语句之前,要么在 switch 语句之前遵循与该开关关联的最后一种情况
..
C# 似乎可以,但我需要 C++,最好是跨平台. 基本上,我有一个开关,可以根据单个条件对内容进行排序,然后在其他所有内容上回退到默认处理. 说: 开关(颜色){案例绿色:红色案例:案例蓝色:画();休息;黄色案例:if(AlsoHasCriteriaX)画();别的转到默认值;休息;默认:Print("难看的颜色,没有油漆.")休息;} 解决方案 不完全是,但你可以这样做:
..
我正在 VB.NET 中编写一些使用 switch 语句的代码,但在其中一种情况下它需要跳转到另一个块.在 C# 中它看起来像这样: 开关(参数){案例“用户ID"://在这里做点什么.案例“packageID"://在这里做点什么.案例“mvrType":如果(其他因素){//在这里做点什么.}别的{转到默认值;}默认://做一些处理...休息;} 但是,我不知道如何将其转换为 VB.NET
..
我看到了一个建议的编码标准,它是 Never use goto unless in a switch statement fall-through. 我不关注.这个“异常"案例究竟是什么样的,可以证明 goto 的合理性? 解决方案 这个构造在 C# 中是非法的: 开关(变量){案例2:Console.WriteLine("变量是 >= 2");情况1:Console.WriteL
..
@echo off:开始1设置/p 输入=动作:for/f "tokens=1-2 delims=" %%a in ("%input%") 做 (转到:%%~a_%%~b >nul 2>&1 ||转到开始1) 如果我输入“| | echo your input is not Recognized",它可以工作,但“goto start1"会使脚本崩溃 :explore_room@echo 房间
..
我刚刚将一个 url 粘贴到我的代码中,忘记评论它,但看到 MSVC++ 成功编译它,我很惊讶.我的代码是这样的, void my_function(){http://www.google.co.in/} 这怎么会被 MSVC++ 编译? 解决方案 其实http后面跟一个冒号被当成标签通过 C++,您可以在 goto 语句(如 goto http;)和其他语句(即 //www.goog
..
我必须在 Python 中使用 goto.我找到了 entrians goto 但我的 Python 实现(Mac 上的 CPython 2.7.1)没有这个模块,所以它似乎不是便携式的.它至少应该适用于所有支持 CPython 字节码的 Python 实现(特别是我关心 CPython 和 PyPy).然后是这个相关问题,以及cdjc 的 goto.以及下面的答案给出的那些. 我可以手动构
..
问题 我在使用 Windows 批处理文件和标签时遇到问题.我不断收到此错误: 系统找不到批次标签指定 我的尝试 两台电脑;一台 Windows XP 和一台 2003 服务器. 确保它被编码为 ASCII 编辑了行继续符的十六进制代码.尝试用 CR 、 LF 和 CRLF 依次替换 all .所有组合都给我同样的错误. 尝试在标签前插入额外的字符,使标签超过 512
..
这个问题实际上是 有趣的讨论的结果不久前programming.reddit.com.基本上可以归结为以下代码: int foo(int bar){int return_value = 0;如果(!do_something(酒吧)){转到错误_1;}如果 (!init_stuff( bar )) {转到错误_2;}如果 (!prepare_stuff( bar )) {转到 error_3;}r
..
只是想把它放在我的脑海里.考虑这个 Erlang 代码示例: test() ->收到{来自,随便} ->%% 做一点事测试();{来自,别的东西} ->%% 做点别的测试();结尾. 不是 test() 调用,只是一个 goto 吗? 我问这个是因为在 C 中我们学到了,如果你做一个函数调用,返回位置总是放在堆栈上.我无法想象这一定是 Erlang 的情况,因为这会导致计算器溢出.
..
我对 GOTO 命令和附属标签有疑问. 事实:给定文件夹中的一堆文件(它们是日志错误),我需要打开它们并检查它们是否包含特定字符串.如果是,则从文件名中删除一些字符(最后一次出现“_"之后的所有字符,包括它自己)并进行其他操作. 为了切断字符,我以循环方式使用 GOTO 命令,因为我发现它在这里描述:http://www.robvanderwoude.com/battech_while
..
如果我使用以下 Windows 批处理代码片段并运行它: echo foo如果 1 == 1 (回声条转到ASDF:asdf回声巴兹) 别的 (回声) 我期望的输出是: foo酒吧巴兹 但我得到: foo酒吧巴兹quux 如果我注释掉 goto asdf 行,它会给出我期望的输出.echo quux 行不应该被执行,那么为什么 goto 的存在会导致这种情况发生? 更新:就其价值
..
我知道每个人都讨厌 goto.在我的代码中,出于我考虑过并感到满意的原因,它们提供了一个有效的解决方案(即我不是在寻找“不要这样做"作为答案,我理解您的保留意见,并理解我为什么要使用它们反正). 到目前为止,它们都很棒,但我想以这样一种方式扩展功能,即要求我本质上能够存储指向标签的指针,然后再访问它们. 如果此代码有效,它将代表我需要的功能类型.但它不起作用,30 分钟的谷歌搜索没有发
..
在实现无限循环时,使用 while(1) 与 for(;;) 与 goto 有区别吗? 谢谢,陈兹 解决方案 它们是等效的,即使您关闭优化器. 示例: #include extern void f(void) {而(1){putchar(' ');}}外部无效g(无效){为了(;;){putchar(' ');}}extern void h(void) {z:putchar(
..
研究如何突破二次循环后 while (true) {//主循环for (int I = 0; I 大多数人推荐调用'goto'函数 看下面的例子: while (true) {//主循环for (int I = 0; I 然而;我经常听说“goto"语句是不好的做法.下图完美地说明了我的观点: 所以 goto 语句到底有多糟糕,为什么? 有没有比使用“goto"语句
..