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 Zitieren
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] Zitieren
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. Zitieren
Guybrush Threepwood Geschrieben 23. Februar 2006 Geschrieben 23. Februar 2006 Und wie funktioniert das dann? Was passiert denn wenn ich den Wert ändere? Zitieren
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. Zitieren
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 Zitieren
Klotzkopp Geschrieben 23. Februar 2006 Geschrieben 23. Februar 2006 Was ja immer noch nicht funktioniert,Warum sollte das nicht funktionieren? Zitieren
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... Zitieren
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? Zitieren
Guybrush Threepwood Geschrieben 23. Februar 2006 Geschrieben 23. Februar 2006 Also ersetzt diese neue Regelung dann malloc und konsorten? Zitieren
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. Zitieren
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? Zitieren
Klotzkopp Geschrieben 23. Februar 2006 Geschrieben 23. Februar 2006 Und für Arrays, die eben keine automatische Lebensdauer haben sollen. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.