Forum: Mikrocontroller und Digitale Elektronik Variablenname "hochzählen"


von Lena (Gast)


Lesenswert?

Guten Morgen,

Ich programmiere in C und habe eine Variable vom Typ struct, die 
„eintrag1“ heißt.
Jetzt möchte ich im Programm automatisch den Namen der Variable 
hochzählen und neue struct-Variablen definieren (eintrag1. eintrag2…).

Bei einem Int hätte ich den Namen in zwei chars zerlegt, mit strcpy und 
strcat zusammengefügt und die Funktion atoi verwendet, aber hier komme 
ich seit zwei Tagen nicht weiter. Im Studium haben wie nur die 
Grundbegriffe von C gelernt und über Google habe ich auch nicht 
gefunden, wobei ich zugeben muss auch nicht genau zu wissen wonach ich 
eigentlich suchen soll:).

Ich hoffe, dass ihr mir helfen könnt.

Gruß
Lena

von Uwe Bonnes (Gast)


Lesenswert?

Warum verwendest Du kein Array von structs?

von Lena (Gast)


Lesenswert?

Weil ich nicht daran gedacht habe:)

da fehlt mir wohl noch die Erfahrung.
Vielen Dank für den Denkanstoß.

von Pink S. (pinkshell)


Lesenswert?

Auch das Basteln von int-Namen funktioniert nicht so, wie du das 
beschrieben hast.

von Michael S. (rbs_phoenix)


Lesenswert?

Ich glaub in C gibt es das nicht. Hab ich jedenfalls noch nirgends 
gesehen. Ich kenn das nur bei PHP. Dort hat jede Variable ein $-Zeichen 
voran stehen. Und wenn man da auf $eintrag1 zugreifen will, kann man 
auch schreiben:
$var = "eintrag1";
echo $$var;

Doch PHP gilt als eine uneffektive Sprache, dafür meines Erachtens aber 
einfacher als andere. Keine Datentypen z.B. oder man braucht bei Arrays 
keine Größe am Anfang festlegen, sondern man sagt, eine Variable ist ein 
Array und das wars.

von Stefan (Gast)


Lesenswert?

Es gäbe noch den Verkettungsoperator ##, aber die Verwendung ist nur für 
den Precompiler gedacht

von Nico S. (nico22)


Lesenswert?

Stefan schrieb:
> Es gäbe noch den Verkettungsoperator ##

Was macht der? Google filtert leider das ## heraus.

von Bernhard R. (barnyhh)


Lesenswert?

Lena schrieb:
> Ich programmiere in C und habe eine Variable vom Typ struct, die
> „eintrag1“ heißt.
> Jetzt möchte ich im Programm automatisch den Namen der Variable
> hochzählen und neue struct-Variablen definieren (eintrag1. eintrag2…).

Wozu das Ganze?

Du erzählst, wie_ Du _irgendetwas implementieren willst; es wäre 
wesentlich sinnvoller, wenn Du zuerst einmal berichtest, was Du da 
machen willst. Beschreibe also zunächst bitte, was dieses irgendetwas 
ist.

Als nächstes solltest Du vielleicht einmal Dich anhand eines C-Lehrbuchs 
Deiner Wahl mit der Sprache "C" etwas vertrauter machen.

Bernhard

von Vn N. (wefwef_s)


Lesenswert?

Nico Sch. schrieb:
> Stefan schrieb:
>> Es gäbe noch den Verkettungsoperator ##
>
> Was macht der? Google filtert leider das ## heraus.

Aber das "Verkettungsoperator" wohl kaum.

Lena schrieb:
> Bei einem Int hätte ich den Namen in zwei chars zerlegt, mit strcpy und
> strcat zusammengefügt und die Funktion atoi verwendet

Was mit Sicherheit nicht das von dir erwartete Ergebnis hätte.

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

Lena schrieb:
> Jetzt möchte ich im Programm automatisch den Namen der Variable
> hochzählen und neue struct-Variablen definieren (eintrag1. eintrag2…).
>
> Bei einem Int hätte ich den Namen in zwei chars zerlegt, mit strcpy und
> strcat zusammengefügt und die Funktion atoi verwendet, aber hier komme
> ich seit zwei Tagen nicht weiter. Im Studium haben wie nur die
> Grundbegriffe von C gelernt und über Google habe ich auch nicht
> gefunden, wobei ich zugeben muss auch nicht genau zu wissen wonach ich
> eigentlich suchen soll:).

Naja, das ist kein Wunder, sowas geht in C naemlich nicht. C ist keine 
interpretierte Sprache, da muessen fuer den Compiler logischerweise die 
Bezeichner auch zur Compilezeit bekannt sein. Rein theoretisch kann man 
gerade bei Strukturen durch einen entsprechenden Speicherzugriff die 
Namen "umgehen", das ist aber gefaehrlich, da man sich darauf verlassen 
koennen muss, wie die Strukturen im Speicher organisiert werden und das 
kann man bei unterschiedlichen Compilerversionen nicht wirklich.

Greets,
Michael

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.