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.
-
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.
-
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!