Hallo, kann es beim AVR-Studio einen Unterschied machen, ob man schreibt if ( (a==0) && (b==1) ) oder if ( (a==0) && ((b==1)) ) ?
Dem AVR Studio ist es herzlich egal, was Du schreibst. Den vom AVR Studio aufgerufenen Compiler interessierts. Aber wieviele zusätzliche Klammern Du um (b == 1) machst, ist auch dem egal.
David schrieb: > kann es beim AVR-Studio einen Unterschied machen, ob man schreibt ja, die Datei wird größer sonst ändert sich aber nichts.
Ich glaube nicht, man kann sogar "if(a==0&&b==1)" schreiben. Genauso ist z.B. (x+y)*2 das gleiche wie ((x+y))*2 oder (((x+y)))*2
Zur Vervollständigung noch was zum Lesen http://en.cppreference.com/w/c/language/operator_precedence
ich bin aber nie sicher ob er wirklich Punkt vor Strichrechnung beherrscht, im Zweifel setze ich sicherheitshalber Klammern und ggffs. noch casts. Sonst wunderte ich mich schon manchmal über "merkwürdige" Ergebnisse, vor allem bei gemischten Rechnungen mit long und int.
Himbeertorte schrieb: > Ich glaube nicht, man kann sogar "if(a==0&&b==1)" schreiben. Glück gehabt: && hat eine niedrigere Priorität als == Es ginge allerdings schief, wenn man schreiben würde if (a&3 == b&3) Da müssen zwingend noch Klammern rein: if ((a&3) == (b&3)) Siehe https://de.wikibooks.org/wiki/C-Programmierung:_Liste_der_Operatoren_nach_Priorit%C3%A4t Ob man allerdings um irgendwelche Klammern zusätzlich Klammern macht, das ist dem Compiler schnurz...
Joachim B. schrieb: > ich bin aber nie sicher ob er wirklich Punkt vor Strichrechnung > beherrscht, im Zweifel setze ich sicherheitshalber Klammern und ggffs. > noch casts. Lerne die Regeln oder setze dir einen Link auf eine passende Web-Seite. Jede Schnörkelei, die du überflüssigerweise in den Code packst, musst du beim nächsten Mal, wenn du ihn anguckst, wieder lesen. David schrieb: > if ( (a==0) && ((b==1)) ) Wenn du schreibst
1 | if ( a==0 && b==1 ) |
ist das genauso übersichtlich und du musst nicht die ganzen überflüssigen Zeichen durch dein Hirn wälzen.
Wolfgang A. schrieb: > durch dein Hirn wälzen Klammern? Wälzen? Ich finde > if ( (a==0) && (b==1) ) leichter zu lesen als: > if ( a==0 && b==1 ) Die Zeiten, wo man an Klammern sparen musste sind nun wirklich vorbei....
Wenn Du die C-Vorrangregeln nicht kennst, mußt Du eben Klammern setzen. Der AVR-GCC ist allerdings überpingelig. Ich wollte mal die Warnung unterdrücken und habe natürlich prompt die Klammern falsch gesetzt.
wenn du in einem if eine zuweisung machst sind klammern interessant: if(a=b) gibt eine warning weil du ja versehentlich das 2. gleich vergessen haben könntest. mit if((a=b)) sagst du dem Compiler, dass du dort wirklich eine zuweisung und keinen vergleich machen wolltest.
Wolfgang A. schrieb: > Wenn du schreibstif ( a==0 && b==1 )ist das genauso übersichtlich und du > musst nicht die ganzen > überflüssigen Zeichen durch dein Hirn wälzen. Leider führt diese Schreibweise immer wieder zu unabsichtlichen Programmiererfehlern. Deshalb fordern viele Kodierrichtlinien das Klammern um diese Ausdrucke. (Stichwort MISRA) Grüße, Adib. --
Vielen herzlichen Dank für die vielen guten Antworten! Lothar M. schrieb: > Siehe > https://de.wikibooks.org/wiki/C-Programmierung:_Liste_der_Operatoren_nach_Priorit%C3%A4t Prima, so etwas für den Überblick habe ich gesucht! Danke Lothar!
Marc S. schrieb: > wenn du in einem if eine zuweisung machst sind klammern interessant: > > if(a=b) > > gibt eine warning weil du ja versehentlich das 2. gleich vergessen haben > könntest. > > mit > > if((a=b)) > > sagst du dem Compiler, dass du dort wirklich eine zuweisung und keinen > vergleich machen wolltest. Das ist kein Teil vom Standard, sondern reine Konvention. Durch die doppelten (syntaktisch überflüssigen) Klammern signalisiere ich als Programmierer anderen Programmierern und zukünftigen selbst(en), dass hier absichtlich eine Zuweisung stattfindet.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.