Forum: PC-Programmierung Const unterschied C/ C++[Anfängerfrage]


von Trudi (Gast)


Lesenswert?

Hallo,
kann mir jemand sagen aus welchem Grund Zeile 3 in C nicht geht und 
weshalb die letzte Zeile auch in C++ nicht geht?
1
void f(int iArrSize)
2
{ const int len = 128;
3
char ach[len]; // geht in C nicht, aber in C++
4
...
5
const int cn=iArrSize;
6
char achBuffer[cn]; // geht auch in C++ nicht 
7
}

Ich würde sagen dass die letzte Zeile nicht geht weil ArrSize eine 
veränderliche Variable ist, richtig?

Grüße Trudi

von manni (Gast)


Lesenswert?

Die Arraygröße muss zur Compile-Zeit feststehen. In C ist etwas, das als 
const deklariert wurde, leider keine wirkliche Konstante - auch nicht in 
C99 -, darum funktioniert Zeile 3 nicht. Du müsstest #define oder (etwas 
verquer) ein enum verwenden. Der Fehler in Zeile 6 ergibt sich aus dem 
ersten Satz hier.

von (prx) A. K. (prx)


Lesenswert?

Trudi schrieb:
> Hallo,
> kann mir jemand sagen aus welchem Grund Zeile 3 in C nicht geht und
> weshalb die letzte Zeile auch in C++ nicht geht?

In C sind "const" unveränderliche Variablen. Numerische Werte sind 
lexikalische Konstanten. Arrays erwarten vor C99 aber lexikalische 
Konstanten oder Ausdrücke davon. Variablen sind nicht zulässig, auch 
nicht unveränderliche. C99 erlaubt dynamische Arrays, was die Sache zwar 
ändert, hier aber nicht zwangsläufig das ist, was du meinst.

In C++ sind skalare "const" per Definition an solcher Stelle einsetzbar. 
Ist einer der markanten Unterschiede. Stroustrup mag den Präprozessor 
nicht.

> Ich würde sagen dass die letzte Zeile nicht geht weil ArrSize eine
> veränderliche Variable ist, richtig?

Ja.

: Bearbeitet durch User
von manni (Gast)


Lesenswert?


von Rolf Magnus (Gast)


Lesenswert?

In C++ sind Variablen, die const sind und statisch initialisiert wurden 
echte Compilezeit-Konstanten, in C gibt es (außer direkt 
hingeschriebenen Werten) keine richtigen Konstanten.
In C++ funktioniert die zweite Version nicht, da die Variable nicht 
statisch initialisiert wurde, sondern dynamisch.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.