目前我正在开发一个使用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;
}
Run Code Online (Sandbox Code Playgroud)
这使得我们可以更容易地跟踪代码中一个部分的清理代码,即在Exit标签之后.
但是,我已经阅读了许多地方,有goto语句是不好的做法.
目前我正在阅读Code Complete书,它说我们需要使用接近其声明的变量.如果我们使用goto,那么我们需要在第一次使用goto之前声明/初始化所有变量,否则编译器会给出goto语句跳过xx变量初始化的错误.
哪条路对不对?
来自Scott的评论:
看起来使用goto从一个部分跳转到另一个部分是不好的,因为它使代码难以阅读和理解.
但是如果我们只使用goto前进到一个标签那么它应该没问题(?).