Veröffentlicht 23. Februar 200619 j 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
23. Februar 200619 j 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]
23. Februar 200619 j 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.
23. Februar 200619 j Was soll passieren? Das Array hat die Länge, die iSize zum Zeitpunkt der Definition des Arrays hat.
23. Februar 200619 j 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
23. Februar 200619 j 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...
23. Februar 200619 j 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?
23. Februar 200619 j Nein, das Array hat immer noch automatische Lebensdauer. Die Größe muss nur nicht mehr schon zur Compilezeit feststehen, das ist alles.
23. Februar 200619 j 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?
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.