www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Anwenden von #define


Autor: Bernd Müller (berndm)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Niels Hüsken (monarch35)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#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.

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ 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

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Bernd Müller (berndm)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank an Alle, das war helfreich.

ciao

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.