Tag: 转到

在交换机中使用“goto”?

我已经看到一个build议的编码标准,读取Never use goto unless in a switch statement fall-through 。 我不跟随。 这个“例外”情况究竟是什么样子,certificategoto是正当的?

转到一个块:做析构函数被调用?

考虑下面的代码: void foo() { { CSomeClass bar; // Some code here… goto label; // and here… } label: // and here… } 酒吧的析构者会被调用吗?

为什么有些内核程序员使用goto而不是简单的while循环?

当我学习C时,老师终日告诉我:“不要使用goto,这是一个坏习惯,它很丑,很危险!” 等等。 那么为什么一些内核程序员使用goto ,比如在这个函数中 ,可以用一个简单的replace while(condition) {} 要么 do {} while(condition); 我不明白这一点。 在某些情况下使用goto而不是while / do会更好吗? 如果是这样,为什么?

是否有可能将一个标签的地址存储在一个variables,并使用goto跳转到它?

我知道每个人都讨厌gotos。 在我的代码中,由于我已经考虑和适应的原因,他们提供了一个有效的解决scheme(即我不寻找“不这样做”作为答案,我理解你的保留,并理解为什么我使用它们无论如何)。 到目前为止,他们已经很棒了,但是我想要扩展function的方式需要我基本上能够存储指向标签的指针,然后再去找它们。 如果这个代码工作,它将代表我需要的functiontypes。 但它不起作用,30分钟的谷歌search没有透露任何东西。 有没有人有任何想法? int main (void) { int i=1; void* the_label_pointer; the_label: the_label_pointer = &the_label; if( i– ) goto *the_label_pointer; return 0; }

使用GOTO或不?

目前我正在开发一个项目,在那里使用goto语句。 goto语句的主要用途是在例程中有一个清理部分,而不是多个return语句。 如下所示: BOOL foo() { BOOL bRetVal = FALSE; int *p = NULL; p = new int; if (p == NULL) { cout<<" OOM \n"; goto Exit; } // Lot of code… Exit: if(p) { delete p; p = NULL; } return bRetVal; } 这使得它更容易,因为我们可以在代码的一个部分跟踪我们的清理代码,也就是在Exit标签之后。 不过,我读过很多地方,有goto语句是不好的做法。 目前我正在阅读代码完整的书,它说,我们需要使用variables接近他们的声明。 如果我们使用goto,那么我们需要在第一次使用goto之前声明/初始化所有的variables,否则编译器会给出错误,因为goto语句跳过了xxvariables的初始化。 哪种方式是正确的? 从斯科特的评论: 它看起来像使用goto从一个部分跳到另一个是不好的,因为它使代码难以阅读和理解。 但是,如果我们使用goto只是向前和一个标签,那么它应该是罚款(?)。

goto Label后的variables声明

今天我发现了一件有趣的事情。 我不知道在goto标签之后不能声明variables。 编译下面的代码 #include <stdio.h> int main() { int x = 5; goto JUMP; printf("x is : %d\n",x); JUMP: int a = 0; <=== giving me all sorts of error.. printf("%d",a); } 给出错误 temp.c: In function 'main': temp.c:7: error: expected expression before 'int' temp.c:8: error: 'a' undeclared (first use in this function) temp.c:8: error: (Each […]

被迫向GOTO黑暗的一面

我们有一个工作环境,在传统(核心)系统上工作的开发人员在向已经感染意大利面代码的现有代码中添加新function时,正在向使用GOTO语句施压。 现在,我明白可能会有使用“只是一个小小的GOTO”的争论,而不是花费时间重构一个更易维护的解决scheme。 问题是,这个孤立的“一个小小的GOTO”并不是那么孤立。 每周至less有一次,有一个新的“一个小GOTO”添加。 由于代码可追溯到1984年或之前,GOTO使许多Pastafarians相信它是受到Flying Spaghetti Monster本身的启发,所以这个代码库已经是可怕的了。 不幸的是,这里写的语言没有任何现成的重构工具,所以它使得难以推动'重构提高生产力以后',因为短期的胜利是唯一赢得关注的胜利… 还有没有其他人经历过这个问题,大家都同意我们不能添加新的GOTO,把2000条线路跳到一个随机部分,但是Anaylsts坚持要这样做,并且pipe理层批准了吗? tldr; 如何才能解决开发人员被迫(不得不)不断添加GOTO语句的问题(通过添加,我的意思是添加跳转到多行的随机部分),因为它“更快地获得了这个特性”? 我开始害怕我们可能会失去有价值的开发者在猛龙这个… 澄清: 转到 here alsoThere:不,我正在谈论的是,在一个子程序中跳出1000行到另一个中间循环的跳转。 转到 somewhereClose there:我什至不谈论你可以合理地阅读,并确定一个程序正在做什么样的gotos。 转到 alsoThere somewhereClose: nextpoint somewhereClose:这是使肉丸midpoint:的代码midpoint: 如果第一次在这里转到下 nextpoint detail:每一个几乎完全不同) 转到 nextpoint 返回 here:在这个问题上,我不是在谈论偶尔使用goto。 去there tacoBell:刚刚回到制图板。 转到 Jail elsewhere:当分析师花费数周的时间来解密程序正在做的事情时,每次触摸时,代码库都会出现严重错误。 事实上,我真的到了我的hell: 如果不是最新的goto 4规格的detail 转到 pointlessReturn: tacoBell pointlessReturn: goto tacoBell Jail:其实,只是一个小小的胜利小更新。 我花了4个小时,一次重构了这个特定程序的一部分,每次都保存在svn中。 每个步骤(其中大约20个)都很小巧,逻辑性强,而且很容易bypass nextpoint:通过一些奇怪的意大利式面条 – 肉丸磁性,自发地跳出餐点,进入屏幕。 转到 elseWhere bypass:合理地validation它不应该引入任何逻辑改变。 使用这个新的更易读的版本,我已经和分析师坐了下来,现在完成了几乎所有的改变。 […]

GOTO在PHP中是邪恶的吗?

我最近发现PHP 5.3支持新的语言结构叫做GOTO 。 大家都知道它做了什么。 但是,这不完全是传统的GOTO ,它只是一个跳转标签。 我很有兴趣知道这个GOTO是否是邪恶的,并暗示着糟糕的代码?

Java中的goto语句的替代方法

Java中goto关键字的替代函数是什么? 由于Java没有转到。

在支持循环和函数的语言中使用“goto”是否有利? 如果是这样,为什么?

我一直觉得,如果可能的话,不应该使用goto 。 在阅读libavcodec(用C编写)时,我注意到了它的多种用法。 在支持循环和函数的语言中使用goto是否有利? 如果是这样,为什么?