Geschweifte Klammer in einer Verzweigung



  • Hallo zusammen!

    Bin seit ein paar Tagen dabei um die Programmiersprache C zu erlernen und habe als Unterstützung das Buch: C von a bis Z.

    Das Buch finde ich bis jetzt nicht schlecht und alles ist gut verständlich, wobei ich zusätzliche Infos, mir aus dem Internet besorge.

    Folgendes Problem:
    Beispiel die if else - Verzweigung:
    In manchen Beispielen ist folgendes zu erkennen:

    if(Bedingung){
    Anweisung;
    }
    else {
    Anweisung;
    }

    Und in anderen Beispielen;
    if(Bedingung)
    Anweisung;
    else
    Anweisung;

    Bei dem zweiten Beispiel wurden die geschweiften Klammern weggelassen.

    Das macht mich nun etwas stutzig und frage mich, ob die geschweiften Klammern nun wichtig sind oder nicht?

    In meinem Editor habe ich beide Ausführungen verglichen, wobei keine Fehlermeldungen zu bekommen waren.

    Gibt es da einen Unterschied?

    Schöne Grüße und schöne Pfingsttage wünscht
    Robotics_RD



  • Hallo, lies bitte mal:

    http://www.c-plusplus.net/forum/272350

    Gruesse



  • Eine Anweisung kann man auch ohne Klammern schreiben.
    Mehrere Anweisungen fasst man duch die Klammern zu einem Anweisungsblock zusammen.
    Und der gilt als eine Anweisung.



  • Geschweifte Klammern fassen ein oder mehrere Statements zu einem Block zusammen. Du kannst sie überall benutzen, etwa auch

    #include <stdio.h>
    
    int main(void) {
      puts("Hallo");
    
      {
        int x = 5;
        printf("%d\n", x);
      }
    
      return 0;
    }
    

    schreiben. Bei if, while, for etc. werden sie gebraucht, wenn man mehr als ein Statement abhängig von der Bedingung ausführen will, etwa

    if(foo) {
      bar;
      baz;
    } else {
      qux;
      quux;
    }
    

    Ob man sie bei einzelnen Statements benutzt, ist eine Stilfrage. Ich tendiere dazu, sie immer hinzuschreiben, weil ich es übersichtlicher finde - das ist ganz besonders bei Verschachtelungen der Fall. Stell dir beispielsweise

    if(foo)
      if(bar)
        baz;
    else   /* oder gehört das doch zum inneren if? Äh... */
      qux;
    

    vor. Mit Klammern entsprechend

    if(foo) {
      if(bar) {
        baz;
      } else { /* Ah.  Jetzt ist's klar. */
        qux;
      }
    }
    

    bzw.

    if(foo) {
      if(bar) {
        baz;
      }
    } else { /* Jupp, kein Problem. */
      qux;
    }
    


  • ⚠ Und Vorsicht:

    if(foo) 
      ;  // es gibt auch leere Anweisungen. die werden auch genutzt
      else 
      qux;
      quux;  // auch wenn das so aussieht, gehört diese Anweisung nicht mehr zum if-else
    
    blubb;
    

    Danke seldon für die Vorlage. War gerade selber am überlegen.



  • Hallo zusammen!

    Danke für die hilfreichen Informationen, die mir sehr geholfen haben!

    Nun werde ich mich an die Klammerung halten, damit keine eigene Verwirrung eintrifft.

    Das Buch ist zwar nicht schlecht, aber ohne einen Kommentar, warum z.B. die Klammern weggelassen wurden, finde ich persöhnlich nicht so gut.

    Man muss auf jedenfall zu dem Buch noch andere Informationen reinholen, die einem etwas deutlicher erklären.

    Nun werde ich jetzt die frische Luft genießen!

    Schöne Grüße und schöne Pfingsttage wünscht
    Robotics_RD



  • Oh, das Buch ist sogar ausgesprochen schlecht. "C von A bis Z" ist hier im Forum berüchtigt, wie die anderen Werke des selben Autors auch - sie strotzen nur so vor Fehlern und Fehlinformationen; stilistische Unschönheiten sind da noch das geringste Problem. Es gibt hier einen laaaangen Thread über das Thema: http://www.c-plusplus.net/forum/272350

    Ich fürchte, du hast dir da eine Batzen teures Altpapier zugelegt.


Anmelden zum Antworten