AVR-Studio - machen die Klammern hier einen Unterschied?

#4466852
Lesenswert?
• ▲
▼
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.
Moderator (Firma: Titel) Persönliche Seite #4466859
Lesenswert?
• ▲
▼
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...
Gast #4466876
Lesenswert?
• ▲
▼
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.
Gast #4467103
Lesenswert?
• ▲
▼
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.
--
Persönliche Seite #4467696
Lesenswert?
• ▲
▼
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.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.