Programmieren - alles kontrollieren 4.941 Themen, 20.715 Beiträge

C: variabelname generieren

frocco / 3 Antworten / Baumansicht Nickles

Hallo
Ich habe einen generierten Text in einem Array. Nun möchte ich mit einer Variable (oder Pointer) auf die Variable verweisen, deren Name dem Text in meinem Array entspricht.
geht das?

bei Antwort benachrichtigen
PaoloP frocco „C: variabelname generieren“
Optionen

ich habs nicht ganz verstanden ...
kannst du's nochmal anders erklären ?

Jedes mal wenn jemand "Cloud" sagt, verliert ein Engel seine Flügel.
bei Antwort benachrichtigen
frocco PaoloP „ich habs nicht ganz verstanden ... kannst du s nochmal anders erklären ? “
Optionen

ich habe folgendes problem:
ich habe mehrere variablen mit daten (daten0, daten1, daten2, daten3 etc.)
diese variablen möchte ich in einer funktion verarbeiten. ich habe nun eine ziffer (z.B. 2). in der variable varname verbinde ich nun das wort "daten" und die ziffer 2 (varname hat nun den inhalt "daten2").
da ich in meiner funktion nun den inhalt von der variable daten2 brauche, muss ich mit hilfe des textes "daten2" in varname auf den inhalt von der variable daten2 kommen

mit einem array kann ich dieses problem nicht lösen, da die erstellung des arrays einiges an aufwand fordern würde.

ich hoffe, ich habe mein problem einigermassen verständlich geschildert!

bei Antwort benachrichtigen
mr.escape frocco „ich habe folgendes problem: ich habe mehrere variablen mit daten daten0, daten1,...“
Optionen

Die variablennamen sind nach dem kompilieren bestenfalls noch als debug information vorhanden. Eine lösung wäre das eigenhändige abspeichern der beziehung "name"->adresse in einem array.
So in der art:

typedef struct {

char *name;
void *addr;
} NameAdrRel;
int daten0, daten1, daten2, daten3, daten4, daten5;
NameAdrRel nar[]={
{"daten0", &daten0},
{"daten1", &daten1},
{"daten2", &daten2},
{"daten3", &daten3},
{"daten4", &daten4},
{"daten5", &daten5},
{NULL, NULL}//hier das ende oder mit sizeof(nar)/sizeof(NameAdrRel) die anzahl berechnen
};

Die einzelnen einträge können auch von einem macro erzeugt werden, wo der variablenname nur einmal angegeben werden muss.
#define NAR(x) {#x, &x}
Damit wird ein eintrag zu
NameAdrRel nar[]={

NAR(daten0),
NAR(daten1),
NAR(daten2),
NAR(daten3),
NAR(daten4),
NAR(daten5),
{NULL, NULL}
};

Habe es aber nicht probiert, kann also auch etwas anders lauten und evtl. nur mit einem c++ preprozessor laufen.

Die auswertung selbst läuft dann durch textvergleich und typecasting der adresse. Ein vorsortieren zur laufzeit und suche mit intervallschachtelung sollte für das tempo sorgen.

mr.escape
"The man who trades freedom for security does not deserve nor will he ever receive either." - Benjamin Franklin"Wer seine Freiheit aufgibt, um Sicherheit zu erreichen, wird beides verlieren." - Georg Christoph Lichtenberg
bei Antwort benachrichtigen