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