2014-04-07 12 views
6
int main() { 
    int sz = 10; 
    goto end; 
    char bytes[sz]; 
end: 
    return 0; 
} 

Ricevo il seguente errore nella compilazione. Io uso gcc con lo standard C99.istruzioni goto per saltare avanti array di lunghezza variabile

test.c: In function ‘main’: 
test.c:3:2: error: jump into scope of identifier with variably modified type 
test.c:5:1: note: label ‘end’ defined here 
test.c:4:7: note: ‘bytes’ declared here 

risposta

14

E 'vietato dalla norma:

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. 

tuo goto salta la linea che assegna l'array bytes in fase di esecuzione. Questo non è permesso.

Si potrebbe limitare la portata di bytes circondandolo con parentesi graffe, includono l'attribuzione prima della goto ed etichetta, o non utilizzare goto affatto.

Per dirla in modo più chiaro, una volta assegnato lo bytes, si è "all'interno" dell'ambito. Prima dell'allocazione, sei "fuori" dall'ambito. Quindi non puoi "saltare dall'ambito" a "dentro l'ambito".

+0

Grazie. una volta allocati i byte, dove finisce lo scope? Ma sto cercando di capire perché il compilatore avvia un ambito per l'array dinamico? – sunil

+0

@sunil: l'ambito termina con la parentesi graffa finale ('}'). – Brian

Problemi correlati