C : stack memory, goto and “jump into scope of identifier with variably modified type”,

后端 未结 3 677
别那么骄傲
别那么骄傲 2020-12-07 00:36

I found that this refuses to compile :

int test_alloc_stack(int size){
    if(0) goto error; // same issue whatever conditional is used
    int apply[size];
         


        
3条回答
  •  醉酒成梦
    2020-12-07 00:56

    It is forbidden by the standard:

    C99 standard, paragraph 6.8.6.1

    Constraints

    [...] A goto statement shall not jump from outside the scope of an identifier having a variably modified type to inside the scope of that identifier.

    Which is exactly what your goto is doing, namely, jumping from outside the scope of apply to inside it.

    You can use the following workaround to limit the scope of apply:

    if(0) goto error;
    
    {
        int apply[size];
        give_values(apply,size);
        return 1;
    }
    
    error:
    return 0;
    

提交回复
热议问题