Was macht "#if" und "#endif"?

#525654
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.
OP #525662
Lesenswert?
• ▲
▼
Hm,

hier mal der Original Quäl Text (stammt von Peter D.):
1
#if XTAL % DEBOUNCE      // handle remainder
2
    OCR1A += XTAL % DEBOUNCE;     // compare once per second
3
#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
#525666
Lesenswert?
• ▲
▼
Markus _neu wrote:
> Hm,
>
> hier mal der Original Quäl Text (stammt von Peter D.):
>
>
1
> #if XTAL % DEBOUNCE      // handle remainder
2
>     OCR1A += XTAL % DEBOUNCE;     // compare once per second
3
> #endif
4
>
>
> 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.
OP #525671
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

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.

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.