Const unterschied C/ C++[Anfängerfrage]

Gast #3470694
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
Gast #3470716
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.
#3470717
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.
Gast #3470815
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren