interessante if erkenntnis

Dieses Thema im Forum "C/C++" wurde erstellt von djtraumwelt, 03.10.2008.

  1. #1 djtraumwelt, 03.10.2008
    Zuletzt bearbeitet: 03.10.2008
    djtraumwelt

    djtraumwelt Foren As

    Dabei seit:
    21.09.2006
    Beiträge:
    78
    Zustimmungen:
    0
    Code:
    int main(int argc, char *argv[]) {
     int x;
     int y;
     x=1;
     y=1;
     if (x==y)
      if (x==1) {
       x=2;
       y=3;
       printf("Hello World!");
      }
     return 0;
    }
    
    Wenn man ein if ohne { und } macht, dann muss das, was passiert, wenn die Bedingung erfüllt ist, in eine Zeile passen. In dem obigen Programm stehen aber 5 Zeilen, die ohne Meckern des Compilers oder des Systems alle ausgeführt werden. Habe dieses Programm unter Win getestet und der Hello World String wird tatsächlich ausgegeben. Des weiteren: Wenn man jetzt vor den ifs anstatt y=1 ein y=2 macht und somit dafür sorgt, dass die Bedingung nicht erfüllt ist, dann sollte das Programm doch eigentlich nur eine Zeile überspringen und zwar mitten in die zweite if rein. Es wird aber tatsächlich alles übersprungen und kein Hello World ausgegeben. Und das ganze funktioniert sogar, wenn bei zutreffen der Bedingung eines if ohne { und } ein for kommt.

    Hat man also einen Code, der bei zutreffen der Bedingung jediglich eine weitere if oder eine schleife ausführen soll, dann kann man sich die lästigen { und } sparen.
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 slackfan, 03.10.2008
    slackfan

    slackfan König

    Dabei seit:
    18.04.2006
    Beiträge:
    809
    Zustimmungen:
    0
    Ort:
    Bonn
    Hallo,


    was stört dich an den {} ? Ich finde die erhöhen die Lesbarkeit hier deutlich. Ohne C groß zu kennen, hätte ich jetzt ohne die von dir getätigten Einrückungen vielleicht ein Problem gehabt, dass Programm nachzuvollziehen.
    Das sieht ja schon fast wie Python aus :D
    Wieso verschachtelst du dass überhaupt. Wäre ein 'and' hier nicht praktischer? Wie gesagt, ich kenne C kaum.

    cu
     
  4. JBR

    JBR Fichtenschonung

    Dabei seit:
    18.03.2007
    Beiträge:
    561
    Zustimmungen:
    0
    Ort:
    Nolop
    Das if bildet mit Bedingung und Anweisungen einen Anweisung, daher wird es ausgeführt.
    Die geschweiften Klammern sind übriegens keinesfalls lästig, sie erhöhen zusammen mit einer korrekten Einrückung die lesbar- und damit debugbarkeit deiner Quelltexte, ein gutes Beispiel hast du eben selbst geliefert.

    Juhu 42*10 Beiträge
     
  5. #4 djtraumwelt, 03.10.2008
    djtraumwelt

    djtraumwelt Foren As

    Dabei seit:
    21.09.2006
    Beiträge:
    78
    Zustimmungen:
    0
    Verschachteln tu ich hier, weil ich mit diesem Code dieses if verhalten Testen wollte. Ohne diese Verschachtelung wäre ich nicht zu dieser Erkenntnis gekommen und das ganze Programm hätte keinen Sinn gemacht.

    Ich finde weniger geschweifte Klammern kann man besser lesen. Es kommt so oft vor dass ich drei mal } hintereinander machen muss und dann meckert der compiler, weil da noch eine vierte fehlt. Ich finde einen Text, der aus 4 Zeilen besteht, wo in jeder Zeile nur eine } steht, irgendwie gar nicht gut lesbar. Aber das ist wohl jetzt Geschmackssache :D
     
  6. #5 daboss, 03.10.2008
    Zuletzt bearbeitet: 03.10.2008
    daboss

    daboss Keine Macht für niemand!

    Dabei seit:
    05.01.2007
    Beiträge:
    1.294
    Zustimmungen:
    0
    Ort:
    sydney.australia.world
    In dem Fall, wenn's bei den schließenden Klammern unübersichtlich wird, z.Bsp. setz ich bei den schließenden Klammern einen kurzen //Kommtar, der sagt, wozu die schießende } gehört, z.Bsp:

    PHP:
    int main(int argcchar *argv[]) {
     
    int x;
     
    int y;
     
    x=1;
     
    y=1;
     if (
    x==y){
      if (
    x==1) {
       
    x=2;
       
    y=3;
       
    printf("Hello World!");
      } 
    //if x1
    }//if xy
     
    return 0;
    }
    //main
    Nebenbei ist's doch ausserdem um einiges weniger fehleranfällig, wenn du Schleifen grundsätzlich klammerst, oder nicht? Stell dir mal vor, du willst später, das nach dem zweiten if (aber noch innerhalb des ersten) noch ein (paar) Anweisungen ausgeführt werden... kann mir vorstellen, das du dich (oder der, der deinen Code editiert) zumindest kurz über Fehler ägerst, die du dann erst aufm zweiten Blick erkennst....
     
  7. #6 saeckereier, 03.10.2008
    saeckereier

    saeckereier Graue Eminenz

    Dabei seit:
    08.05.2005
    Beiträge:
    1.920
    Zustimmungen:
    0
    Ort:
    Im schönen Norden
    Es gibt für Java ein paar Coding Konventionen, die man super auf C übertragen kann und meiner Meinung nach Sinn machen:
    Code:
    // Einzeilige ifs ohne Klammern
    if (condition) doAnweisung();
    
    // Bei mehrzeiligen dann eben wieder so:
    if (condition) {
        Anweisung1;
        Anweisung2;
        ...
        AnweisungN;
    }
    
    Die Lesbarkeit wird nicht durch viele Schweifklammern schlechter, sondern durch überlange Methoden. Der beste Weg, da dran vorbeizukommen ist gutes Aufteilen in Methoden und teilweise auch Objektorientierung (weil sehr eleganter Weg um unterschiedliches Verhalten durch Polymorphie zu lösen, erspart viele ifs und switch-Statements)

    Das oben gezeigte Schachteln der schliessenden Klammern ist übrigens auch sehr sinnvoll. Dazu kommt dann noch, dass eine gute IDE (z.B. Eclipse) Mechanismen bietet, um zu sehen, bis wo der Block geht (Markierung der schliessenden Klammer, Doppelklick selektiert alles zwischen den Klammern) Dann lässt sich gut damit arbeiten.
     
  8. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  9. andy81

    andy81 von_suse_zu_arch_wechsler

    Dabei seit:
    30.03.2008
    Beiträge:
    72
    Zustimmungen:
    0
    Nein. In C wird grundsätzlich nur die erste Anweisung nach dem if ausgeführt, falls die Bedingung erfüllt ist. Diese Anweisung muss nicht unbedingt in einer Zeile stehen. Beispiel gefällig:

    Code:
    int main(){
            int x = 0;
    
            x++;
            if (x == 1)
            x
            =
            234
            +
            6
            ;
    
            printf("x = %d", x);
    
            return 0;
    }
    
    Sollen mehrere Anweisungen ausgeführt werden musst du eine Verbundanweisung erstellen. Das machst du indem du um diese Anweisungen die geschweiften Klammern setzt. Der Compiler betrachtet eine Verbundanweisung als eine Anweisung und kann somit auch mehrere Befehle ausführen.

    In deinem Beispiel ist die erste Anweisung nach dem ersten if wieder ein if, welches ausgeführt wird, sobald die Bedingung erfüllt ist. Ist auch das zweite if erfüllt, so wird wieder nur die erste Anweisung nach diesem if ausgeführt. In deinem Fall ist das eine Verbundanweisung, wodurch der gesamte Block ausgeführt wird.

    Ich hoffe ich habe dir das jetzt etwas verständlicher machen können.
     
  10. #8 saeckereier, 03.10.2008
    saeckereier

    saeckereier Graue Eminenz

    Dabei seit:
    08.05.2005
    Beiträge:
    1.920
    Zustimmungen:
    0
    Ort:
    Im schönen Norden
    Es wurde doch längst gesagt, dass es eben die nächste Anweisung und nicht Zeile ist....
     
Thema:

interessante if erkenntnis

Die Seite wird geladen...

interessante if erkenntnis - Ähnliche Themen

  1. Proxmox VE 4.0 zeigt erste Beta-Version mit interessanten Neuerungen

    Proxmox VE 4.0 zeigt erste Beta-Version mit interessanten Neuerungen: Die Proxmox Server Solutions GmbH hat eine erste Beta von Version 4.0 seiner Open-Source Servervirtualisierungslösung Proxmox Virtual Environment...
  2. Android 4.3 - kleines Update mit interessanten Funktionen

    Android 4.3 - kleines Update mit interessanten Funktionen: Am 24.7. lud Googles Android-Chef Sundar Pichai zu einem Presse-Frühstück in New York, bei dem unter anderem auch Android 4.3 »Jelly Bean«...
  3. GNU Guix: Paketmanager mit interessanten Möglichkeiten

    GNU Guix: Paketmanager mit interessanten Möglichkeiten: Die Entwickler Ludovic Courtès und Jason Self haben sich daran gemacht, mit Guix einen einfach zu verwendenden funktionalen Paketmanager für...
  4. interessante Serveranwendungen?

    interessante Serveranwendungen?: Hallo, da ich immer auf der Suche nach irgendwelchen interessanten Experimenten bin, eröffne ich hier einfach mal nen Thread, in dem man seine...
  5. Interessanter Film über G8 in Genua...

    Interessanter Film über G8 in Genua...: Hallo alle - Ich bin gerade auf diesen Film gestoßen und halte ihn für sehenswert. Sry, wenn sowas in diesem Board etwas fehl am Platz erscheint...