Hallöchen, beim stöbern durch verschiedene Sourcecodes bin ich auf folgende #define gestoßen: #define XY 6 #define IRGENDWAS(N) ((N&0x3F)<<XY) Könnte mir bitte jemand erklären, wie dies zu interpretieren ist bzw. was der Preprozessor (GCC) daraus machen würde?
Jonas wrote: > was der Preprozessor (GCC) daraus machen würde? http://www2.informatik.uni-halle.de/lehre/c/c_define.html
Er "verundet" N mit 0x3F (also 63) und schiebt dann das Resulat um 6 nach links
XY wird fortan durch 6 ersetzt N in IRGENDWAS wird durch das ersetzt, was beim Ersatz von IRGENDWAS in Klammern steht. Beispiel: IRGENDWAS(a) wird ersetzt durch ((a&0x3F)<<6)
Jonas wrote: > Hallöchen, beim stöbern durch verschiedene Sourcecodes bin ich auf > folgende #define gestoßen: > > #define XY 6 Hier wird XY = 6 definiert. Im Code lässt sich dann schreiben
1 | int a = 3 + XY // = 9 |
> #define IRGENDWAS(N) ((N&0x3F)<<XY)
Hier wird eine Inline-Funktion definiert:
1 | int a = IRGENDWAS(1) // Ergibt 000001 & 111111 = 000001 << XY(=6) = 1000000 |
Problematisch ist, dass N im #define nicht geklammer ist. Interpretier mal IRGENDWAS(3+7)
Man kann übrigens die Toolchain dazzu veranlassen, nur den Präprozessor aufzurufen und sich dessen Ausgabe ansehen. Beim gcc ist es glaub ich die Option -E.
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.