Wieso wird das compiliert???



  • mit dem G++ 4.7.0 wird folgendes fehlerfrei kompiliert:

    int main()
    {
        int size = 0;
        cin >> size;
        int Array[size];
    
        for (int i = 0; i < size; ++i)
        {
            Array[i] = i;
            cout << Array[i];
        }
    
        return 0;
    }
    

    Als ich jemandem sagen wollte: "So und das darf man nicht machen!..." Bumm, und kein Fehler beim compilieren!

    wieso erlaubt er nicht konstante Ausdrücke?

    (Programmausführung soweit getestet weitgehend problemlos)



  • Weil GCC das nunmal erlaubt...



  • Komisch, dass er es erlaub. Immerhin gibt er eine Warnung aus:

    [Warning] ISO C++ forbids variable length array 'Array' [-Wvla]

    Und da kommen wir wieder zu einem Fazit: Treat warnings as errors.


  • Mod

    Gugelmoser schrieb:

    Komisch, dass er es erlaub. Immerhin gibt er eine Warnung aus:

    [Warning] ISO C++ forbids variable length array 'Array' [-Wvla]

    Und da kommen wir wieder zu einem Fazit: Treat warnings as errors.

    Nun, es wird beim GCC immerhin alles so gemacht, wie es im (C99) Standard steht, insofern ist es nicht falsch. Bloß unportabel. Und in C++ unnötig³.



  • C99 hat Variable Length Arrays und GCC hat nunmal auch einen C99-Compiler.
    Es liegt also nahe, dass als Compiler-Extension auch für C++ zu unterstützen.
    Standardmäßig läuft GCC ja mit Compiler-Extensions, wenn man ihm nicht explicit per -std= sagt, wie er den Code behandeln soll.

    Mit -Wall wird der Code zwar weiterhin kompiliert, da ja die Extensions aktiviert sind, aber der GCC wird dich per Warnung darüber in Kenntnis setzen.



  • SeppJ schrieb:

    Gugelmoser schrieb:

    Komisch, dass er es erlaub. Immerhin gibt er eine Warnung aus:

    [Warning] ISO C++ forbids variable length array 'Array' [-Wvla]

    Und da kommen wir wieder zu einem Fazit: Treat warnings as errors.

    Nun, es wird beim GCC immerhin alles so gemacht, wie es im (C99) Standard steht, insofern ist es nicht falsch. Bloß unportabel. Und in C++ unnötig³.

    Aber wieso nimmt er da Rücksicht auf C, wenn wir doch ein C++ Projekt kompilieren wollen.


  • Mod

    Gugelmoser schrieb:

    Aber wieso nimmt er da Rücksicht auf C, wenn wir doch ein C++ Projekt kompilieren wollen.

    Weil sie dann diesen Teil nicht extra abschalten brauchen, wenn der Compiler auf C++ schaltet. Es kann auch keine Rede von mangelnder Rücksicht sein, schließlich wird dadurch kein gültiges C++-Programm ungültig und selbst ungültige Programme machen mit hoher Wahrscheinlichkeit das, was der Programmierer möchte.



  • Knips mal -pendantic-errors an. Solltest du immer mit angeben.



  • Hacker schrieb:

    Knips mal -pendantic-errors an. Solltest du immer mit angeben.

    Ah perfekt!


Log in to reply