hallo, kann jemand freundlicherweise mir sagen, was hinter diese defines steckt? #define VAR_fX 0 #define VAR_cX (1<<VAR_fX) #define VAR_fY 4 #define VAR_cY (1<<VAR_fY) Mit define definere ich doch eine konstante, deren Wert unveränderbar. (1 << xy) xy ist die Bitposition mfg
#defines sind eigentlich nichts weiter als Platzhalter, die kurz vor dem Compilieren an den entsprechenden Stellen vom "Precompiler" eingefügt werden. Eine Art Tippersparnis und Konfigurationshilfe.
@ Bernd Müller (berndm) >kann jemand freundlicherweise mir sagen, was hinter diese defines >steckt? >#define VAR_fX 0 >#define VAR_cX (1<<VAR_fX) Es werden Bitmuster erzeugt, bei denen eine '1' um eine bestimmte Anzahl Binärstellen nack links geschoben wird. Damit können Maskierungsoperationen durchgeführt werden. Bitmanipulation VAR_fX ist die Bitnummmer VAR_cX das entsprechende Bitmuster. MFG Falk
Bernd Müller wrote:
> Mit define definere ich doch eine konstante, deren Wert unveränderbar.
Nein. #define ist eine Präprozessoranweisung, die ein Makro definiert,
die also dem Präprozessor mitteilt, dass an jeder Stelle im Code, wo der
hinter der Anweisung angegebene Text vorkommt, dieser durch den dahinter
befindlichen Wert zu ersetzen ist.
#define FOO 5
sagt dem Präprozessor, dass überall im Code, wo "FOO" auftaucht eine 5
einzufügen ist.
Da der Präprozessor schlau ist, kann man mit #define auch komplexere
Makros mit Parametern erzeugen.
#define FOO(x) (1 << (x))
bedeutet, dass überall im Programm, wo "FOO(<PARAMETER>)" auftaucht,
dieses durch "1 << (<PARAMETER>)" zu ersetzen ist.
#define erzeugt keine Konstante. Ein mit #define erzeugtes Makro
belegt keinen Speicherplatz, sondern ist eine reine Textersetzung, die
nur für den Quellcode relevant ist, für das compilierte Programm jedoch
keine Bedeutung hat.
Konstanten werden in C wie Variablen, nur zusätzlich mit dem
Schlüsselwort "const" erzeugt und bekommen, genau wie "normale"
Variablen Platz im Speicher zugewiesen.
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.