Verschachtelungstiefe



  • Hallo zusammen

    Ich habe in einem Programm eine ellenlange abfolge von "else if":

    if
    ...
    else if
    ...
    else if
    usw..
    else
    

    Als ich ein weiteres reinhängen wollte, kam plötzlich folgede Fehlermeldung:

    fatal error C1061: Compilerlimit: Blöcke zu tief geschachtelt
    

    Nach einem grossen Fragezeichen 😕 habe ich dann gesehen, dass max. 128 Verzweigungen möglich sind. Ich wusste gar nicht, dass es da ein Limit gibt. Nun ist die Frage, wie ich das verbessere. Natürlich ist eine Möglichkeit, daraus ein case zu machen, oder gibt es dort auch einen maximale Anzahl?

    Vielen Dank!



  • Ähm ... Ich denke, du hast da irgendwas falsch strukturiert und solltest es ganz anders aufbauen ...



  • Hab schon gedacht, dass so was kommt. Das Programm ist leider nicht auf meinem Mist gewachsen, ich entwickle es nur weiter.

    Aber selbst wenn die bisherige Lösung alles andere als elegant ist kann ich jetzt auf die schnelle nicht so viel umkrempeln. Würde ich zwar gerne, aber mein Chef lässt mir nicht so viel Zeit.

    Aber ein paar Dinge muss ich sicherlich ändern, denn bei den "else if" habe ich lauter strcmp drin, und der eine String wurde mit #define definiert. Case braucht aber eine numerische Konstante.... 😡



  • Plotter schrieb:

    Aber selbst wenn die bisherige Lösung alles andere als elegant ist kann ich jetzt auf die schnelle nicht so viel umkrempeln. Würde ich zwar gerne, aber mein Chef lässt mir nicht so viel Zeit.

    ihr solltet mal ernsthaft miteinader reden. der chef hat doch was an der waffel, wenn er so viel zeitdruck macht, daß die softwarequalität dabei rapide abkackt. das kann einfach nicht im sinne des unternehmens sein.

    Plotter schrieb:

    Aber ein paar Dinge muss ich sicherlich ändern, denn bei den "else if" habe ich lauter strcmp drin, und der eine String wurde mit #define definiert. Case braucht aber eine numerische Konstante.... 😡

    naja, geht schon.
    vormals:

    #define ICH "volkard"
    #define DU "Plotter"
    #define CHEF "Marc++us"
    ...
    if(strcmp(str,ICH))
       cout<<"Lohnerhöhung";
    else if(strcmp(str,DU))
       cout<<"C++-Buch";
    else if(strcmp(str,CHEF))
       cout<<"neues Auto";
    else
       cout<<"nix";
    

    jetzt

    #define ICH 0
    #define DU 1
    #define CHEF 2
    #define MAXID 3
    char* Namen[]={"Volkard","Plotter","Marc++us"};
    int nameToID(char* str)
    {
       for(int i=0;i<MAXID;++i)
          if(strcmp(Namen[i],str)==0)
             return i;
       return -1;
    }
    ...
    switch(nameToID(str)){
    case ICH:
       cout<<"Lohnerhöhung";
    case DU:
       cout<<"C++-Buch";
    case CHEF:
       cout<<"neues Auto";
    default:
       cout<<"nix";
    

    ups, wenn die #defines im fremden header sind, darfste ja nix dran machen.

    #define ICH_ID 0 
    #define DU_ID 1 
    #define CHEF_ID 2 
    #define MAX_ID 3 
    char* Namen[]={ICH,DU,CHEF};
    ...
    


  • Nun manchmal muss es bei der Entwicklung halt schnell gehen. Und die Software hat inzwischen eine solche Dimension bekommen, dass ein schnellschnell-Umbau schlicht nicht möglich ist. Ich habe den Vorschlag einer Neukonzeption gemacht, und den Zeitbedarf nicht unter einem Jahr angegeben. Und das liegt momentan einfach nicht drin.

    Aber nun zu meinem Problem, ich habe es so gelöst, dass ich diese Abfrage in eine eigene Funktion verpacke, und statt den ewigen "else if"s nur noch if Anweisungen nehme, die ich bei Erfolg mit return true abbrechen kann. Ist für mich die einfachste und schnellste Lösung.

    Danke Leute!


Anmelden zum Antworten