2009-06-28 5 views
6

Credo che la mia domanda è se vale quanto segue Cvariabili array di dimensioni in C

int main(void) { 
    int r = 3; 
    int k[r]; 
    return 0; 
} 

Se così fosse, sarebbe un po 'una cura per spiegare il motivo per cui non funziona in compilatore di Microsoft C, ma in GCC, e quando è stato aggiunto allo standard C.

Grazie

risposta

3

È un'estensione GCC che l'attuale MSVC non supporta. È possibile sostituire in MSVC abbastanza facilmente con un _alloca (un'allocazione di stack che non richiede deallocazione manuale da parte del programmatore):

#include <malloc.h> 

... 

int *k = (int *)_alloca(sizeof(*k)*r); 
+4

E 'stata un'estensione GCC, ma venne codificato in C99. MSVC in effetti non lo supporta ancora. Nota anche che su Linux, è alloca(), non _alloca, ed è in bdonlan

+2

È stato standardizzato per 10 anni ... –

+0

Ho sempre usato questo, ma non ho ricevuto l'errore fino a quando non ho usato Windows questo cancella la mia confusione – adk

13

È in C99. MSVC supporta solo C89.

9

Il C99 standard ha aggiunto matrici di lunghezza variabile, ma altri fornitori come GCC le hanno aggiunte molto prima.

4

Mi dispiace questa non è una risposta, ma mi piacerebbe per evidenziare un potenziale problema con l'utilizzo di array di lunghezza variabile. La maggior parte del codice che ho trovato sembra così.

void foo(int n) 
{ 
    int bar[n]; 
    . 
    . 
} 

Nessun controllo esplicito degli errori qui. Un grande n può facilmente causare problemi.

0

È un'estensione GCC che l'attuale MSVC non supporta. È possibile sostituirlo in MSVC abbastanza facilmente con un _alloca (un'allocazione di stack che non richiede deallocazione manuale da parte del programmatore)

sì, ma si è limitato a 1 MB