schnell Modul beenden



  • Hallo zusammen,

    kurze Frage in die Runde.
    Ich sitze gerade davor und überlege mir wie ich relativ simpel ein Modul im Fehlerfall vorzeitig beenden kann und einen entsprechenden Rückgabewert and die Aufrufer zurückgebe.

    Folgende Annahme:

    modul1.c

    if (func1()) return FALSE;
    

    modul2.c (beinhaltet func1())

    int func1(void)
    {
        int check=0;
        tue irgendwas;
        check = func2();
        if (func2()) return FALSE;
        tue irgendwas;
    }
    
    int func2(void)
    {
        int check2 = 0;
        tue irgendwas; <-- z.B. passiert hier der Fehler
        check2 = func3();
        ....
    }
    

    Das heißt, vorzeitig alles abbrechen ohne einen Variable durchzuschleifen etc. um den Aufrufer dies zu signalisieren. Geht das überhaupt ? Ach ja, kein GOTO soll verwendet werden.

    Also mir bleibt spontan nur das durchschleifen, wollte aber mal fragen obs da was besseres gibt ?

    Danke & Gruß





  • devkid schrieb:

    Exceptions?

    seit wann gibts die in C 🙄



  • Hm, C hat er aber nicht explizit erwähnt, nur die Dateiendungen haben darauf hin gewiesen...



  • enzephalon schrieb:

    Hallo zusammen,

    kurze Frage in die Runde.
    Ich sitze gerade davor und überlege mir wie ich relativ simpel ein Modul im Fehlerfall vorzeitig beenden kann und einen entsprechenden Rückgabewert and die Aufrufer zurückgebe.

    Folgende Annahme:

    modul1.c

    if (func1()) return FALSE;
    

    modul2.c (beinhaltet func1())

    int func1(void)
    {
        int check=0;
        tue irgendwas;
        check = func2();
        if (func2()) return FALSE;
        tue irgendwas;
    }
    
    int func2(void)
    {
        int check2 = 0;
        tue irgendwas; <-- z.B. passiert hier der Fehler
        check2 = func3();
        ....
    }
    

    Das heißt, vorzeitig alles abbrechen ohne einen Variable durchzuschleifen etc. um den Aufrufer dies zu signalisieren. Geht das überhaupt ? Ach ja, kein GOTO soll verwendet werden.

    Also mir bleibt spontan nur das durchschleifen, wollte aber mal fragen obs da was besseres gibt ?

    Danke & Gruß

    Du wirst um die Rückgabewerte der Funktion wohl nicht rum kommen.

    int start()
    {
     if (func1() != 0)
     {
      // Error
      return 1;
     }
    
     return 0;
    }
    
    int func1()
    {
      if (doSomething() != 0) return 1;
      return 0;
    }
    

    Alternativ kannst du mit einer globalen Variable arbeiten, aber das wäre nicht sehr schön, finde ich.

    int myError = 0;
    
    void start()
    {
     func1();
     if (myError != 0)
     {
       // Error
       return;
     }
    }
    
    void func1()
    {
      doSomething();
    
      if (myError != 0)
      {
        // Error
        return;
      }
    }
    


  • hallo zusammen,

    danke erst mal für die Antowrten.

    Das ganze war schon auf "C" bezogen, kein C++.

    Werde es wohl mit den returns lösen.

    Gruß



  • vielleicht könntest dir auch was mit jetjmp/longjmp basteln.
    🙂



  • enzephalon schrieb:

    hallo zusammen,

    danke erst mal für die Antowrten.

    Das ganze war schon auf "C" bezogen, kein C++.

    Werde es wohl mit den returns lösen.

    Gruß

    als info: Es gibt auch ein extra C-Forum.



  • loks schrieb:

    enzephalon schrieb:

    hallo zusammen,

    danke erst mal für die Antowrten.

    Das ganze war schon auf "C" bezogen, kein C++.

    Werde es wohl mit den returns lösen.

    Gruß

    als info: Es gibt auch ein extra C-Forum.

    Sorry, poste das erste mal, habs

    a) nicht gewusst,
    b) nicht richtig nachgeschaut

    werd mich für die Zukunft bessern. 😉



  • Dieser Thread wurde von Moderator/in rüdiger aus dem Forum Rund um die Programmierung in das Forum ANSI C verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten