goto的可接受用途是什么?

时间:2010-06-03 16:10:57

标签: c embedded goto

  

可能重复:
  Examples of good gotos in C or C++

您认为goto语句的用途是否可以接受?我正在讨论C嵌入式工作的一些编码指南,并想知道是否存在goto是最干净的工作方式。

3 个答案:

答案 0 :(得分:1)

对于C,我发现在某些函数中使用goto作为公共出口点很有用。如果你需要在返回之前释放资源,那么做retval = -ERROR; goto fn_exit;而不是尝试打破多层for / while循环是很好的。

有些人认为在精心设计的代码中没有必要 - 当你达到使用goto很有吸引力的点时,你应该把功能分解成多个子功能。也许在某些情况下这是正确的,但如果您必须传递多个变量,或者将指针传递给变量,以便子函数可以更新这些值,我觉得您添加了不必要的复杂性。

这是关于using goto for error management的最新SO问题。我确信浏览goto tag会为您提供更多答案。

答案 1 :(得分:0)

我发现goto可能会在很多地方简化逻辑。我的规则是没有2个goto相互重叠,并且goto及其标签是'close';通常,相隔不超过30行。

通常,当我有一个复杂的条件,我必须检查很多东西时,goto可能会有所帮助:

if ( condition1 && cond2 )
  if ( checkFile( file ) )
    goto DONE;
else
  if ( condition3 )
    goto DONE;

handleError();
return 0;

DONE:
...do something...
return 1;

答案 2 :(得分:0)

我个人认为,现代编程语言中没有可接受的goto语句用法。

已故Edsger W. Dijkstra撰写的“被认为有害的GOTO声明”很好地解决了这个问题。对于这个星球上的每个软件开发人员来说,都应该阅读该文章。

值得注意的是,20世纪70年代末,来自UT奥斯汀的Don Good小组的Gypsy语言没有得到。

值得注意的是,Ichbiah等人只在Ada中包含了一个goto,因为DoD在需求规范中明确地要求它。我记得读过Ichbiah和他的团队故意让goto目标标签语法尽可能难看,使标签像拇指一样伸出,并且不鼓励使用goto。