Arrays mit Variablen definieren (z.B. int array[variable])
-
Hallo,
ich habe letztens ein kleines Programm in C geschrieben. Diese sollte die Stellen einer Zahl zählen und anschließend ein Array definieren mit genau sovielen Elementen, wie die Zahl Stellen hat.
Z.B. sollte für die Zahl 141 ein Array in der Form "int array[anzahl_stellen]" mit anzahl_stellen = 3 definiert werden.Mit dem "Pelles C"-Compiler wird das problemlos kompiliert, aber mit dem Borland-Compiler wird die Fehlermeldung "constant expression required[...]" ausgegeben.
Habe auch danach gegoogelt und das, was ich jetzt daraus verstehe, ist, dass man eigentlich Arrays nicht mit Variablen definieren darf.
Habe auch versucht, die Variable als Konstante mit const zu definieren und dann das Array zu erstellen, aber der Borland-C gibt immer noch dieselbe Fehlermeldung aus.
Daher wollte ich fragen, ist das allgemein falsch bzw. nicht zu empfehlen, Arrays mit Variablen zu definieren, oder ist es nur eine Eigenart des Borland-Compilers?
Ich entschuldige mich schonmal, falls das eine blöde Frage ist. Bin noch ein Anfänger in C.
Vereinfacht sieht die Stelle im Programm etwa so aus:
#include <stdio.h> int hoch (int bas, int expo) { int i2, bas2 = bas; if (expo < 0) return 0; switch(expo) { case 1: return bas; case 0: return 1; default: for (i2 = 1; i2 != expo; i2++) bas2 *= bas; } return bas2; } int main(void) { int zahl, zahl2, zahl3; zahl = zahl2 = zahl3 = 141; unsigned char stellen; for (stellen = 0; zahl !=0; stellen++) zahl /= 10; int qs[stellen], i; for (i = 0; i != stellen; i++) qs[i] = (zahl3 / hoch(10, i) ) % 10; printf("Die Zahl %i hat %i Stellen.\n", zahl2, stellen); for (i = 0; i != stellen; i++) printf("Die %i. Stelle ist: %i\n", i+1, qs[i]); getchar(); return 0; }
Mit dem Pelles C funktioniert dieser Code, mit Borland-C gibt es Fehlermeldungen.
-
Stichwort C99. Wird nicht überall unterstützt.
-
Sowas ist erst ab C99 erlaubt, obwohl auch einige ältere Compiler dementsprechende Erweiterungen haben.
Bis heute wird C99 nicht von allen gängigen Compilern unterstützt - insbesondere Microsoft hält C wohl nicht mehr für besonders wichtig und hat bislang keine Pläne, C99 zu implementieren. Ob und ggf. ab welcher Version Borland das unterstützt, kann ich dir leider nicht sagen, aber scheinbar kann deine Version es nicht, und du wirst dich mit
#include <stdlib.h> /* ... */ int *q = malloc(stellen * sizeof(int)); /* q benutzen */ free(q);
zufrieden geben müssen.
-
Außerdem verlangt C89 auch die Variablendefinition am Beginn eines Sichtbarkeitsbereiches ( {} ) und nicht irgendwann später, wie
int qs[stellen], i;
in deinem Fall.