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


von Markus _. (markush)


Lesenswert?

Hi Leutz,

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

???

Gruß - Markus

von Karl H. (kbuchegg)


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.

von Markus _. (markush)


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

von Karl H. (kbuchegg)


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.

von Markus _. (markush)


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

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
Noch kein Account? Hier anmelden.