Scratch Geschrieben 23. Februar 2006 Geschrieben 23. Februar 2006 Hi, meine Frage: Warum kann ich folgenden Code unter Linux kompilieren aber unter Windows nicht? int iSize = 255; char cBuffer[iSize]; G++ (gcc 3.2.3) kompiliert hier ohne murren. Funktioniert auch fehlerfrei. Fehler in MSVC 8 Express Edition sind: error C2057: Konstanter Ausdruck erwartet error C2466: Zuordnung eines Arrays der konstanten Größe 0 nicht möglich. error C2133: 'cBuffer': Unbekannte Größe Gruß Scratch
Guybrush Threepwood Geschrieben 23. Februar 2006 Geschrieben 23. Februar 2006 Kann ich mir nicht vorstellen das er das mit dem gcc kompiliert, weils falsch ist. wenn musst du das so deklarieren const int iSize=255; [/PHP]
Klotzkopp Geschrieben 23. Februar 2006 Geschrieben 23. Februar 2006 Auto-Arrays mit einer Länge, die nicht zur Compilezeit feststeht, sind im neuesten C-Standard erlaubt. Der gcc hat eine Erweiterung, die das auch in C++ ermöglich. Im C++-Standard ist das aber (noch) nicht.
Guybrush Threepwood Geschrieben 23. Februar 2006 Geschrieben 23. Februar 2006 Und wie funktioniert das dann? Was passiert denn wenn ich den Wert ändere?
Klotzkopp Geschrieben 23. Februar 2006 Geschrieben 23. Februar 2006 Was soll passieren? Das Array hat die Länge, die iSize zum Zeitpunkt der Definition des Arrays hat.
Guybrush Threepwood Geschrieben 23. Februar 2006 Geschrieben 23. Februar 2006 Hmm na ich weiß nicht, da fand ich die vorherige Richtung konsequenter. So kommen bestimmt einige Leute auf die Idee das so zu machen: int i; scanf("%i",&i); int szArray[i]; [/PHP] Was ja immer noch nicht funktioniert, aber der Kompiler dürfte ja nicht mehr meckern... Naja auf jeden Fall wieder was gelernt
Klotzkopp Geschrieben 23. Februar 2006 Geschrieben 23. Februar 2006 Was ja immer noch nicht funktioniert,Warum sollte das nicht funktionieren?
Guybrush Threepwood Geschrieben 23. Februar 2006 Geschrieben 23. Februar 2006 Na weil szArray zur Compilezeit festgelegt wird und i erst während der Laufzeit abgefragt wird? D.h. mit dem neuen Standard der als Größenangaben eine Nicht Kosntante zulässt hätte szArray doch dann eine zufällige Größe...
Klotzkopp Geschrieben 23. Februar 2006 Geschrieben 23. Februar 2006 Na weil szArray zur Compilezeit festgelegt wird und i erst während der Laufzeit abgefragt wird?szArray wird eben nicht schon zur Compilezeit festgelegt. D.h. mit dem neuen Standard der als Größenangaben eine Nicht Kosntante zulässt hätte szArray doch dann eine zufällige Größe...Wieso?
Guybrush Threepwood Geschrieben 23. Februar 2006 Geschrieben 23. Februar 2006 Also ersetzt diese neue Regelung dann malloc und konsorten?
Klotzkopp Geschrieben 23. Februar 2006 Geschrieben 23. Februar 2006 Nein, das Array hat immer noch automatische Lebensdauer. Die Größe muss nur nicht mehr schon zur Compilezeit feststehen, das ist alles.
Guybrush Threepwood Geschrieben 23. Februar 2006 Geschrieben 23. Februar 2006 Das heißt es wird immer noch auf dem Stack angelegt? Dann würde ich malloc ja nur noch für größere Arrays brauchen die nicht mehr auf den Stack passen?
Klotzkopp Geschrieben 23. Februar 2006 Geschrieben 23. Februar 2006 Und für Arrays, die eben keine automatische Lebensdauer haben sollen.
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden