Forum: Compiler & IDEs AVR-GCC und komplexere Anweisungen


von schneidertobi (Gast)


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

von Matthias (Gast)


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

von Peter D. (peda)


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

von schneidertobi (Gast)


Lesenswert?

Hi,
das * ist wohl beim kopieren rausgerutscht.

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

von Peter D. (peda)


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

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
Noch kein Account? Hier anmelden.