Search code examples
c++cgotojump-table

How to store goto labels in an array and then jump to them?


I want to declare an array of "jumplabels".

Then I want to jump to a "jumplabel" in this array.

But I have not any idea how to do this.

It should look like the following code:

function()
{
    "gotolabel" s[3];
    s[0] = s0;
    s[1] = s1;
    s[2] = s2;

    s0:
    ....
    goto s[v];

    s1:
    ....
    goto s[v];

    s2:
    ....
    goto s[v];
}

Does anyone have a idea how to perform this?


Solution

  • It is possible with GCC feature known as "labels as values".

    void *s[3] = {&&s0, &&s1, &&s2};
    
    if (n >= 0 && n <=2)
        goto *s[n];
    
    s0:
    ...
    s1:
    ...
    s2:
    ...
    

    It works only with GCC!