Hi nochmal In einer Headerdatei steht folgendes: #define calc(Reg3, Reg2, Reg1 ) \ ( 0x00000000L + \ ( Reg3 << 2) + \ ( Reg2 << 1) + \ ( Reg1 )) Was bedeuten die Schrägstriche am Ende immer? Und was macht die Funktion insgesamt? Ich komm da nicht ganz mit. Danke!
die backslashe zeigen dem compiler, dass der befehl in der nächsten zeile weiter geht.
Jakob wrote:
> Und was macht die Funktion insgesamt? Ich komm da nicht ganz mit.
Es ist keine Funktion, sondern ein Makro. Dessen Inhalt wird beim
Auftreten ersetzt. Wenn also einer irgendwo im Text
1 | x = calc(42, 23, 11); |
schreibt, dann ersetzt der Präprozessor das durch
1 | x = ( 0x00000000L + ( 42 << 2) + ( 23 << 1) + ( 11 )); |
Wobei das "0x00000000L + " natürlich nur eine sehr umständliche Schreibweise für "hier passiert gar nichts weiter" ist. ;-)
hat das 0L nicht vielleicht den Sinn dass die Berechnung in long ausgeführt wird??
Ja, OK, aber dann hätte es ein typecast auch (und vor allem offensichtlicher) getan.
Walter wrote: > hat das 0L nicht vielleicht den Sinn dass die Berechnung in long > ausgeführt wird?? Das war vielleicht die Intention, aber dazu ist es an der völlig falschen Stelle. Es müssen ja zuerst die Klammerausdrücke berechnet werden und wenn bei (Reg3<<2) schon 2 Bits runtergefallen sind, kannse die 32-Bit-Addition auch nicht wieder hervorzaubern. Peter
> Es müssen ja zuerst die Klammerausdrücke berechnet werden und wenn bei >(Reg3<<2) schon 2 Bits runtergefallen sind, kannse die 32-Bit-Addition > auch nicht wieder hervorzaubern. bei entsprechenden Zahlen fällt beim Schieben noch nichts runter, sondern erst bei der Addition. Aber der Ausdruck ist sicher nicht besonders guter Programmierstil.
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.