我在代码中有多个位置,希望跳转到一个特定位置并返回到以前的位置。

函数调用提供了控制流,但对我来说不是一个选择,因为我希望分支的代码访问多个变量,并将所有变量作为参数传递给函数调用既不实用也不高效。

并且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();
    //...
}

09-07 04:59