2016-04-16 11 views
1

Unter GCC 4.8.1Array mit variabler Größe in C in VS

static int len = 10; 
int main() { 
    int a[len]; 
    return 0; 
} 

kann Erfolg kompilieren.

Aber kompilieren, wenn wie folgt geändert fehlschlagen:

static int len = 10; 
int main() { 
    static int a[len]; 
    return 0; 
} 

Aber in meinem Visual Studio, auch die ehemaligen Erfolg nicht zusammenstellen kann. Wie kann ich dieses Problem beheben? Und gibt es eine Möglichkeit, die letztere zu ändern, um Erfolg zu erzielen?

+0

Wenn Sie Visual Studio verwenden möchten, die offensichtliche Lösung ist, die VLAs zu ersetzen durch Zeiger und explizit malloc den Speicher. In C99 sind sie wirklich eine eher unbedeutende Konvenienz und es ist leicht genug ohne zu leben. –

+0

@JohnColeman Sie haben Recht, aber ich stimme nicht damit überein, dass die VLAs "eine kleine Annehmlichkeit" sind. In den meisten Implementierungen warten sie auf das Auftreten von segfaults, weil sie im Wesentlichen unkontrollierbare Aufrufe von 'alloca()' sind. –

+0

@Rhymoid Ist das der Grund, warum C11 einen Schritt zurück genommen hat? –

Antwort

1

Der MSVC-Compiler unterstützt nur C90, C99 wird nicht unterstützt, und Arrays mit variabler Länge sind eine Funktion von C99.

Siehe this; Das ist selbst mit MSVC++ nicht möglich.

0

Die MSVC auf Windows nicht unterstützt VLAs noch, so dass Sie das Array mit dynamischen Speicherzuweisung machen müssen:

static int len = 10; 
int main() { 
    int *a = malloc(len * sizeof(int)); 
    if (a == NULL) exit(1); 
    return 0; 
} 
Verwandte Themen