Anwenden von #define

OP #731969
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
@ 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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.