www.mikrocontroller.net

Forum: Compiler & IDEs AVR-GCC und komplexere Anweisungen


Autor: schneidertobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
wieso baut mein gcc bei volgender anweisung mist:
bufPoint++ |= ((PRG_RDB(&f6x8[*(++stringPoint)][z]))<<6);

aber nicht bei folgender:

x = *(++stringPoint);
*bufPoint++ |= ((PRG_RDB(&f6x8[x][z]))<<6);

Die muessten doch gleichertig sein oder?

(alle datentypen sind unsigned char bzw. pointer darauf(bufPoint
stringPoint))

Hat mich ne Menge Zeit gekostet bis ich darauf gekommen bin alle
Anweisungen die nach diesem Schema aufgebaut waren in 2 zu splitten.

Tobias

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

einmal hast du

bufPoint++ |=....

und einmal

*bufPoint++ |=...

Ersteres dürfte der Compiler garnicht compilieren da an bufPoint
zweimal ein Wert zugewiesen wird.

Matthias

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dazu würde ich grundsätzlich immer raten.

Wenn eine Anweisung zu komplex ist, daß ich selber nicht mehr
durchsehe, dann teile ich sie in 2 oder mehr Zeilen auf.

Oft wird dadurch der erzeugte Code sogar kürzer und schneller.
D.h. auch Compiler mögen keine zu komplexen Ausdrücke.


Peter

Autor: schneidertobi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
das * ist wohl beim kopieren rausgerutscht.

Aber ich werd mir jezt wohl angewoehnen muessen nicht zu komplexe
ausdruecke zu bauen.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Müssen" muß nur Compiler und zwar immer den richtigen Code draus
machen, wenn der Ausdruck syntaktisch korrekt ist.


Der einzige Grund, um mehr oder weniger komplexe Ausdrücke zu
schreiben, ist allein, daß man den Code auch selber versteht und das
auch noch nach Jahren, wenn man mal wieder einen Blick drauf wirft.


Peter

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.