我在代码中有多个位置,希望跳转到一个特定位置并返回到以前的位置。
函数调用提供了控制流,但对我来说不是一个选择,因为我希望分支的代码访问多个变量,并将所有变量作为参数传递给函数调用既不实用也不高效。
并且goto
语句仅用于带有标签,即应该是单程票。
目前,我正在通过以下方面实现我所需要的:
void *return_addr;
int x,y;
...
return_addr=&&RETURN_0;
goto SOMEWHERE;
RETURN_0:
...
x+=1;
...
return_addr=&&RETURN_1;
goto SOMEWHERE;
RETURN_1:
...
SOMEWHERE:
y=x;
...
goto *return_addr;
有没有更优雅,更省事的东西?
最佳答案
有没有更优雅,更省事的东西?
您显然正在使用GCC,因为computed goto statement是GCC扩展名。使用GCC,我们可以使用nested function并访问局部变量,而无需将它们作为参数传递:
{
int x, y;
void SOMEWHERE()
{
y = x;
//...
}
//...
SOMEWHERE();
//...
x += 1;
//...
SOMEWHERE();
//...
}