- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 10 von 17

Thema: C Klammerung

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    05.11.2007
    Beiträge
    1.076
    Okay, Danke Euch, dann hab ich es jetzt doch verstanden. Hätte nie gedacht, daß eine Zuweisung VOR einer Operation stehen könnte.
    Ich dachte immer, erstmal rechnen und dann zuweisen. Naja man lernt halt nie aus. Ich denke auch, es ist "einfacher" ein paar Klammern mehr zu setzen,
    nicht das erste Mal, daß ich mir dadurch das Leben schwer mache. Dann habt noch ein Bugfreies Wochenende

  2. #2
    Erfahrener Benutzer Roboter Genie Avatar von malthy
    Registriert seit
    19.04.2004
    Ort
    Oldenburg
    Beiträge
    1.379
    Zitat Zitat von Siro Beitrag anzeigen
    Hätte nie gedacht, daß eine Zuweisung VOR einer Operation stehen könnte.
    Hm, versteh dich jetzt nicht so ganz. Eigentlich werden ja nur die Wahrheitswerte von (a & b == 0) und (a + b == 0) berechnet. Und weil die Operatoren & und + eben einmal stärker und einmal schwächer als == binden, fällt das Ergebnis eben so aus, wie es es ausfällt.

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    05.11.2007
    Beiträge
    1.076
    sorry, das war ja jetzt auch falsch ausgedrückt. Das ist natürlich keine Zuweisung, sondern eine Abfrage.
    das mit dem Binden ist schon merkwürdig (verwirrend) für mich, weil das gab es in der Form nicht bei Pascal/Delphi.
    Geändert von Siro (18.10.2013 um 23:28 Uhr)

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.03.2011
    Beiträge
    1.899
    Zitat Zitat von Siro Beitrag anzeigen
    sorry, das war ja jetzt auch falsch ausgedrückt. Das ist natürlich keine Zuweisung, sondern eine Abfrage.
    Eigentlich nicht. == ist ein genau so ein Operator wie &. So etwas wie einen Abfrageoperator gibt es in C nicht. == ist der Vergleichsoperator und liefert TRUE, wenn die Werte auf beiden Seiten gleich sind.
    das mit dem Binden ist schon merkwürdig (verwirrend) für mich, weil das gab es in der Form nicht bei Pascal/Delphi.
    Aber natürlich gibt es das, wie überall, wo mehrere Operationen in einem Ausdruck zulässig sind. Ein einfacher, bekannter Fall ist: Punktrechnung geht vor Strichrechnung (d.h. ein * bindet stärker als ein +. Es gibt aber noch weitere Regeln für Brüche. Da es aber in C (und eigentlich allen Programmiersprachen) viel mehr Operatoren als nur die rein mathematischen gibt, sind die Bindungsregeln auch komplexer. Daher ist
    Obwohl man die Bindung oder Rangfolge der Operatoren bei Unsicherheit ja schnell mal nachschlagen kann setze ich trotzdem immer ein paar Klammern mehr, weil es die Lesbarkeit des Codes erhöht. Der Kompiler ignoriert überflüssige Klammern sowieso...
    eine gute Strategie.

    Ich denke, das Problem liegt an einer anderen Stelle. Ein if in C funktioniert etwas anders, als in manchen anderen Sprachen. Ist der Wert der Klammer hinter einem if TRUE, wird der nächste Befehl ausgeführt. Ob sich der Wert in der Klammer durch einen Vergleichsoperator, durch einen anderen Operator oder durch eine beliebig komplexe Aufreihung von Operatoren ergibt (oder ob da einfach der Wert 1 steht) ist egal. Deswegen ist ein gängiger Fehler in C, daß man statt if ( a == 3) die Zuweisung if ( a = 3) schreibt. Das zweite ist in C sytaktisch korrekt, aber meist nicht das, was man will.

    MfG Klebwax
    Strom fließt auch durch krumme Drähte !

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    67
    Beiträge
    2.435
    Hallo Siro,

    Du solltest dir noch etwas angewöhnen.

    Schreibe immer:
    if (0 == a)
    und nie
    if (a == 0)

    Rein logisch ist das identetisch, aber in C, und ein paar anderen Sprachen, gibt es den Unterschied bei = (zuweisung) und == (gleich).
    Wenn du die Konstante immer links schreibst und du versehentlich
    if (0 = a)
    tippst, wird dich der Compiler anmotzen!

    if (a = 0)
    ist aber auch gültige Syntax, macht aber etwas ganz anderes als
    if (a == 0)

    MfG Peter(TOO)

  6. #6
    Erfahrener Benutzer Robotik Visionär Avatar von oberallgeier
    Registriert seit
    01.09.2007
    Ort
    Oberallgäu
    Beiträge
    8.694
    ... Siro ... solltest dir noch etwas angewöhnen ...
    Bin zwar nicht Siro - aber wird mir sicher auch gut tun. Denn DAS ist ein Tipp, wie ich es liebe. Weil er die Zuverlässigkeit nächtlich-müden Programmzeilenschreibens ziemlich erhöht!

    Es lebe das Kommutativgesetz!
    Ciao sagt der JoeamBerg

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    05.11.2007
    Beiträge
    1.076
    Ein if in C funktioniert etwas anders, als in manchen anderen Sprachen.
    Da hast Du recht, vermutlich liegt da mein Problem:
    Eine Abfrage wie if (a) würde in anderen Sprachen angemeckert werden, weil ein Operator fehlt.
    Bei if (a=3) handelt es sich quasi um ein Doppelschritt, wenn ich das so nennen darf.
    Erst wird a der Wert 3 zugewiesen und dann wird verglichen ob das Ergebnis ungleich 0 ist.
    Vermutlich wird das sogar wegoptimiert, weil 3 immer TRUE ist.

    Jezt wird mir auch langsam klar warum es == gibt. Das bedeutet nicht etwa "besonders gleich"
    sondern lediglich ein Vergleich ohne jegliche Zuweisung.

    Mit dem Vertauschen sieht zwar erstmal etwas "ungewohnt" aus, hat aber durchaus seinen Sinn.
    Einer Konstanten kann ich ja nichts zuweisen. Leuchtet ein.

  8. #8
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    11.08.2008
    Ort
    Hallein
    Alter
    33
    Beiträge
    802
    Jaja, die Yoda Conditions ^^
    Kultuverein Metal Resurrection, für mehr Bands und Konzerte in Österreich (:

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen