www.mikrocontroller.net

Forum: Compiler & IDEs Was macht "#if" und "#endif"?


Autor: Markus _neu (markush)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi Leutz,

kann mir mal einer sagen was folgender Code bewirkt:
#if
   Anweisungen
#endif

???

Gruß - Markus

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> kann mir mal einer sagen was folgender Code bewirkt:

Gar nichts, weil das ein Syntax Error ist.

Das #if muss schon eine Bedingung haben, die entweder
wahr oder falsch sein kann.

Dann allerdings macht #if das was alle Präprozessor
Anweisungen machen: Sie verändern den Quelltext der
zum Compiler geht.

Konkret entscheidet #if darüber ob eine Codesequenz
im Quellcode bleibt oder ob sie rausfliegt bevor der
Compiler den Code zu sehen kriegt.

Autor: Markus _neu (markush)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hm,

hier mal der Original Quäl Text (stammt von Peter D.):
#if XTAL % DEBOUNCE      // handle remainder
    OCR1A += XTAL % DEBOUNCE;     // compare once per second
#endif

Wobei hier XTAL den Wert 4000000 hat und Debounce 256 (beides per 
define).
Das heisst ja, diese Bedingung ist immer false da XTAL % DEBOUNCE 0 
zurückgibt. Seh ich das richtig? Die folgende Anweisung "OCR1A ..." wird 
nie ausgeführt.

Gruß - Markus

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Markus _neu wrote:
> Hm,
>
> hier mal der Original Quäl Text (stammt von Peter D.):
>
>
> #if XTAL % DEBOUNCE      // handle remainder
>     OCR1A += XTAL % DEBOUNCE;     // compare once per second
> #endif
> 
>
> Wobei hier XTAL den Wert 4000000 hat und Debounce 256 (beides per
> define).
> Das heisst ja, diese Bedingung ist immer false da XTAL % DEBOUNCE 0
> zurückgibt.

Für diese konkreten Werte: ja

> Seh ich das richtig? Die folgende Anweisung "OCR1A ..." wird
> nie ausgeführt.

Nicht nur nie ausgeführt. Sie wird gar nicht kompiliert,
es gibt sie gar nicht im fertigen Programm. Der Präprozessor
entfernt sie aus dem Programm, bevor der eigentliche Compiler
das Programm übersetzt.

Autor: Markus _neu (markush)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz Buchegger wrote:
> Nicht nur nie ausgeführt. Sie wird gar nicht kompiliert,
> es gibt sie gar nicht im fertigen Programm. Der Präprozessor
> entfernt sie aus dem Programm, bevor der eigentliche Compiler
> das Programm übersetzt.

Ja klar, so hab ich das eigentlich auch gemeint.

Supi, vielen Dank für deine Hilfe! Irgendwie hat ich da nen Knoten, 
eigentlich ist das ja ganz einfach und klar was gemeint ist (aber 
nachher ist man ja immer schlauer...).



Markus

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.