Zum Inhalt springen

variable variablennamen :-)


Empfohlene Beiträge

Geschrieben

folgendes Problem: (C++)

gibt es eine Möglichkeit Variablen in einer For-Schleife anzusprechen, wenn dies folgendermaßen heißen:

int Zahl0001 = 1;

int Zahl0002 = 2;

.

.

.

int Zahl9999 = 9999;

das ganze sollte nicht über einen (zusätlichen) array gelöst werden !

im Code sollte dann folgendes möglich sein:

for (int xxxx=1; xxxx<10000; xxxx++)

{

cout << Zahlxxxx; <= ich hoffe ihr versteht was ich meine.

}

Frage gibts da ne Möglichkeit sowas zu lösen ? Oder geht das nur mitm Array ?

Geschrieben

Es gibt nur 2 Arten: Das ganze als Array oder als Liste (egal ob verkettet oder nicht). Irgendwo müssen die Daten stehen und sie müssen im Bezug zueinander stehen, bzw. auffindbar sein, damit man damit arbeiten kann.

Allein diese Variablenliste hier:

int Zahl0001 = 1;

int Zahl0002 = 2;

...

int Zahl9999 = 9999;

ist schon an sich schon ein Array (auch wenn die Zahlen theoretisch gestreut im Speicher liegen könnten - der Compiler würde sie versuchen wie eine Struktur hintereinander anzuordnen (falls static), bzw. innerhalb des Namensraums die Variablen hintereinander auf dem Stack anzulegen (der auch hoffentlich groß genug ist) und das ganze wäre "irgendwie" immer noch ein Array - wenn auch evtl. die Reihenfolge rückwärts wäre). Es gibt jedoch dabei ein kleines Problem, welches ich am Ende noch anspreche.

Ob diese Zahlen automatisiert vom Compiler angelegt werden könnten, weiß ich jetzt auch nicht direkt - aber mit meinem alten Assembler war es möglich mit Makros in Repeat-Schleifen solche "Code-Listen" mit generierten Namen noch vor der Übersetzung zu erzeugen (ähnlich wie ein Typedef und Makro gemixt) - aber ich vermute, daß das wie der GOTO-Befehl zu einer außerordentlichen komplexen Fehlerquelle heranwachsen könnte und sowas vielleicht absichtlich in heutigen Compilern unterbunden wird.

Wenn es noch irgendwie machbar sein sollte, dann nur als Makro oder aber Du machst Dir einen Code-Generator, der Dir eine Include-Datei erzeugt und direkt den Sourcecode für das Definieren und Initialisieren der 10000 Variablen erzeugt - bei M$ Visual Studio wirst Du jedoch dann ein zweites Problem haben:

Ich habe es geschafft einmal das Maximum an zulässigen Source-Zeilen für eine CPP zu überschreiten - das waren schon einige tausend aber es waren bedeutend weniger als 10000. Da meckert der Compiler dann, daß zuviele Zeilen vorliegen und man gefälligst auslagern soll - übersetzen tut er dann jedenfalls nichts mehr. (Es waren glaub irgendwo zwischen 1500 und 2500 - weiß ich auch nicht mehr und den Source habe ich mir leider nicht kopiert - das war damals auch sowas wie eine gigantische Struktur - ähnlich wie das was Du beabsichtigst).

Warum willst Du das auch unbedingt ohne Arrays machen? Willst Du damit etwas bestimmtes bezwecken? Irgendwie könnte man das bestimmt machen, aber es wäre sicherlich eines nicht mehr:

Ein guter ordenlicher Programmierstil nach heutigem Maßstab.

Geschrieben

int Zahl0001 = 1;

int Zahl0002 = 2;

.

.

.

int Zahl9999 = 9999;

Was soll denn das? Wer keine Arbeit hat, der macht sich welche!

--> Typischer Anwendungsfall für ein Array, Liste, Map etc., eventuell aich für den new-operator oder eine eigene Klasse

for (int xxxx=1; xxxx<10000; xxxx++)

{

cout << Zahlxxxx; <= ich hoffe ihr versteht was ich meine.

}

--> Lässt sich ebenfalls mit den o.g. Varianten realisieren.

das ganze sollte nicht über einen (zusätlichen) array gelöst werden !

Warum nicht? Was genau hast du vor?

------------

Das dynamische Ansprechen von normalen Variablennamen geht nur in einer Script- oder Interpretersprache --> z.B. VB, VBA, VBScript (Funktion eval("variablenname") )

Geschrieben

ok ersma danke !

was genau habe ich eigentlich vor:

ich habe ein directX-spiel geschrieben, welches zu beginn sehr viele grafiken in verschiedene surfaces lädt.

so hat zb ein panzer (eine einheit) ca. 10 verschiedene zustände (richtungen) und ca. 10 verschiedene farbzustände. davon gibts dann ca. 100 einheiten.

die variablennamen der surfaces habe ich wie folgt gewählt (mit excel erzeugt):

LPDIRECTDRAWSURFACE7 EinheitXZYYY;

wobei

X die Richtung darstellt

Z die Farbe

YYY die Art der Einheit

sicherlich könnte ich jetzt einen array erzeugen, der folgendermaßen aussieht:

Einheiten[Farbe][Richtung][Art],

aber die zuweisung der einzelnen surfaces wäre ja wohl von hand, oder wieder excel, zu lösen...

es sei denn es gibt da ne andere möglichkeit ???

Geschrieben

hi!

1. wie schon crush geschrieben hat, liese sich dies über macros lösen.

@crush mit welcher version vom visual-studio hattest du dieses problem? ich arbeite hier auch mit anwendungen, die sich im bereich um die 4000-5000 zeilen code bewegen, mal ganz davon abgesehn, was durch diverse macros noch hinzukommt. ist mit vs6 und vs.net kein problem.

grüsse

Geschrieben

Das war bei einer Enterprise Edition VStudio 6 - das war aber vor 2 Jahren und ich bin mir wirklich nicht mehr sicher wieviel Zeilen das nun tatsächlich waren - aber es war auf jeden Fall feierabend und er wollte nicht mehr weiter. Ich werde mal in der nächsten Zeit schauen, ob ich mir davon nicht doch eine Kopie gemacht habe, ich wüßte selber gerne wieviel das jetzt nun tatsächlich waren. Vielleicht waren es ja doch mehr Zeilen als ich geschrieben habe, ist alles möglich, weil ich eine gigantische Struktur mit Wiederkehrenden Blöcken mehrfach verschachtelt ineinanderkopiert habe. Es gibt aber eine bestimmte Grenze, vielleicht kann man die auch irgendwo in den Settings vom Compiler verändern und die war nicht gut eingestellt?!?! Keine Ahnung. Bist Du sicher, daß alle Deine Zeilen in einer einzigen .CPP sind?

Geschrieben

Also ich hab hier gerade mal das Excel2000-Automatisierungsinterface erstellen lassen. Die cpp-Datei hat über 50.000 Zeilen, die dazugehörige h-Datei nochmal fast 10.000 - kein Problem für VC6 EE.

*fragt nicht, warum ich im Büro bin ;)*

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...