Variablennamen zur Laufzeit(temporär) ändern z.B. für Schleife



  • Hallo Spezies,

    ich habe eine vorgegebene globale int-Zahlenreihe.
    Nun will ich diese Variablen in einer Schleife einem Array zuweisen.
    Ansatzweise Code (klappt natürlich noch nicht):

    int no1=1, no2=4, no3=6;
    int intArray[10];
    int i;
    char varName[10];
    varName[0]= 'n'; varName[1]='o'; varName[3]=0;
    for(i = 1; i < 4; i++){
        itoa(i, &varName[2], 10);
        printf("%s = %i\n", varName,[b] [i]varName[/i][/b]);
        intArray[i] = ???
    }
    

    Geht das? Wie muss ich da rangehen? Es versteht sich von selbst, dass ich viel mehr externe Variablen zuweisen muss. . .

    Danke schonmal.
    sheriff



  • Nein, das geht nicht - zur Laufzeit sind die Variablennamen nicht einmal mehr bekannt (da kennt dein Programm nur Speicher-Adressen). Du könntest höchstens deine Variablen no1, no2 etc in ein Array zusammenfassen:

    int nos[3] = {1,4,6};
    int Array[10];
    
    for(i=0;i<3;++i)
      Array[nos[i]] = 4711;
    


  • Danke für die schnelle Antwort. Das die Variablennamen zur Laufzeit nicht mehr existieren weiß ich.
    Habe nur an eine ALternative gedacht um Code und Laufzeit zu sparen. . .

    Ich bekomme ca 50 Variablen mit Namen a la:
    outSO_Lock_H_01_Rel bis outSO_Lock_R_45_Rel.

    Weiß auch nicht, wer die festgelegt hat.

    Danke trotzdem, oder ne andere Idee?



  • sheriff schrieb:

    Danke für die schnelle Antwort. Das die Variablennamen zur Laufzeit nicht mehr existieren weiß ich.
    Habe nur an eine ALternative gedacht um Code und Laufzeit zu sparen. . .

    Ich bekomme ca 50 Variablen mit Namen a la:
    outSO_Lock_H_01_Rel bis outSO_Lock_R_45_Rel.

    Weiß auch nicht, wer die festgelegt hat.

    Danke trotzdem, oder ne andere Idee?

    Laufzeit sparst Du dadurch nicht. Du willst Code sparen.

    Du könntest eine Kombination aus Templates machen, die Du mit dem Präprozessor Operator ## auf eine Variable zugreifen läßt.
    Metaprogrammierung läßt grüßen. (http://de.wikipedia.org/wiki/C-Plusplus-Metaprogrammierung)

    Das spart aber vermutlich keinen Code bei einmalig 50 Zeilen 😉

    Wenn Du nicht grade scharf bist, Dir das anzueignen, erscheint mir ein guter Editor, der Dir die 50 Befehle per Macro erzeugt allerdings schneller als Problemlösung.
    Wenn Du auf die Variablen häufiger zugreifen musst, würde ich ein Array von int * anlegen, wo die Adressen der 45 Variablen drin gespeichert sind.
    Dann kannst Du mit *outS0Lock[0] = 4711 z.B. auf die erste Variable zugreifen und damit durchiterieren.



  • Wenn Du auf die Variablen häufiger zugreifen musst, würde ich ein Array von int * anlegen, wo die Adressen der 45 Variablen drin gespeichert sind.
    Dann kannst Du mit *outS0Lock[0] = 4711 z.B. auf die erste Variable zugreifen und damit durchiterieren.

    Das wird es - einfach und gut 👍 . DANKE.


Log in to reply