Autodetect Arraygröße bei Definition

Gast #3453844
Lesenswert?

Hallo,

gibt es eine Möglichkeit, bei der Definition die Arraygröße 
wegzulassen/automatisch eintragen zu lassen?

Ich habe ein Array, das wirklich seeehr groß ist und immer mal händisch 
hier und da geändert wird, wenn eine neue Version compiliert wird. 
Eigentlich ist es ja nicht die Aufgabe eines Programmierers, sowas 
nachzuzählen oder bei Veränderungen immer die Zahl abändern zu müssen. 
Sowas kann doch sicher ein Präprozessor/Compiler viel besser und 
sinnvoller.

"Unsauber" wäre natürlich, einfach 9999 einzutragen und es der 
Optimierung anzuvertrauen... aber im Programm selbst wäre es ganz 
nützlich, wenn ich dann auch wüsste, wie groß es real ist...

Beispiel (damit klar ist, was gemeint ist):
1
static const tBla Bla[860] PROGMEM = {
2
...
3
}
Gast #3453917
Lesenswert?

Bla schrieb:
> Eigentlich ist es ja nicht die Aufgabe eines Programmierers,
Natürlich ist es DEINE Aufgabe als Programmiere Speicher anzufordern, 
und ergo musst DU auch wissen wie viel Speicher DU brauchst.
Wenn sich die benögtigte Speichergröße bei jedem mal Compiliren ändert 
(warum eigentlich?) dann musst DU dir was einfallen lassen... dynamische 
Speicher alokierung, make-datei und compiler flags(wäre für dich wohl 
das sinnvollste) oder was auch immer... gibt genug möglichkeiten.

Bla schrieb:
> Sowas kann doch sicher ein Präprozessor/Compiler viel besser und
> sinnvoller.
Speicherverwaltung ist mit Sicherheit NICHT die Aufgabe von Compiler 
und/oder Präprozessor. Die liegt entweder beim OS, oder wenn es ein µC 
ohne OS ist, dann eben sehr wohl beim PROGRAMMIERER. Aber selbst mit OS 
musst DU schon irgendwie sagen, wie viel Speicher DU haben willst.

Bla schrieb:
> Ich habe ein Array, das wirklich seeehr groß ist
Was "groß" ist und was nicht, ist sache der ansicht. Die berühmten 
"20cm" eben. Wäre geil wenn du mal sagst was das für ein Array ist...
Wenn da ein String drin steht ist es egal, dann kannst du einfach:
1
const char mySting[] = "Mal gucken wie lang das Ding wird.";
Da wird die Größe dann automatisch ermittelt. Bei allem anderen sieht es 
schlecht aus.

Bla schrieb:
> gibt es eine Möglichkeit, bei der Definition die Arraygröße
> automatisch eintragen zu lassen?
Es gibt mit sicherheit Sprachen wo das geht, aber C/C++ gehört nicht 
dazu, und ist für sowas auch gar nicht gedacht. Das ist nämlich das 
schöne an C/C++: DU hast die Kontroller über das, was passiert.

Grüße
#3453947
Lesenswert?

>Ich habe ein Array, das wirklich seeehr groß ist und immer mal händisch
>hier und da geändert wird, wenn eine neue Version compiliert wird.

Es kann in solchen Fällen sinnvoll sein, das Array nicht manuell zu 
bearbeiten, sondern aus den Ausgangsdaten als Teil des Buildprozesses 
Code erzeugen zu lassen. Z.B. eine .csv-Datei lässt sich mit ein paar 
Zeilen in einer beliebigen Scriptsprache in eine Array-Definition 
konvertieren.
Gast #3454094
Lesenswert?

Kaj schrieb:
> Bla schrieb:
>> Eigentlich ist es ja nicht die Aufgabe eines Programmierers,
> Natürlich ist es DEINE Aufgabe als Programmiere Speicher anzufordern,
> und ergo musst DU auch wissen wie viel Speicher DU brauchst.

Warum? Wenn die Größe zur Compilezeit feststeht und der Compiler die 
ganz problemlos ermitteln kann, warum soll der Programmierer die 
Elemente dann nochmal von Hand abzählen und die Anzahl extra 
hinschreiben müssen? Damit der Compiler prüfen kann, wie gut der 
Programmierer im Zählen ist?

> Wenn sich die benögtigte Speichergröße bei jedem mal Compiliren ändert
> (warum eigentlich?) dann musst DU dir was einfallen lassen...

Wo steht denn was davon, daß sie sich jedesmal ändert? Wenn man z.B. 
eine Menüstruktur abbildet und jeder Menü-Eintrag ein Array-Element ist, 
ändert sich die Größe halt, wenn man neue Menü-Einträge erzeugt oder die 
Menüstruktur umstellt, oder wenn man z.B. eine Debug-Version des 
Programms hat, die abhängig von einem #define ein zusätzliches 
Debug-Menü beinhaltet oder eben nicht. Welchen Vorteil sollte es 
bringen, wenn man die jedesmal neu abzählen muß?

> dynamische Speicher alokierung, make-datei und compiler flags(wäre für
> dich wohl das sinnvollste) oder was auch immer... gibt genug
> möglichkeiten.

Wie sollen diese Dinge denn dabei helfen, die Anzahl der Elemente eines 
statisch im Quellcode definierten Arrays zu ermitteln? Und wie soll man 
im Programmspeicher ein Array dynamisch allokieren?

> Bla schrieb:
>> Ich habe ein Array, das wirklich seeehr groß ist
> Was "groß" ist und was nicht, ist sache der ansicht. Die berühmten
> "20cm" eben. Wäre geil wenn du mal sagst was das für ein Array ist...
> Wenn da ein String drin steht ist es egal, dann kannst du einfach:const
> char mySting[] = "Mal gucken wie lang das Ding wird.";
> Da wird die Größe dann automatisch ermittelt. Bei allem anderen sieht es
> schlecht aus.

Und warum ist es bei Strings auf einmal nicht mehr - wie du sagst - 
seine
"Aufgabe als Programmiere Speicher anzufordern"?

> Es gibt mit sicherheit Sprachen wo das geht, aber C/C++ gehört nicht
> dazu, und ist für sowas auch gar nicht gedacht. Das ist nämlich das
> schöne an C/C++: DU hast die Kontroller über das, was passiert.

Es gibt keine Sprache, die "C/C++" heißt.

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