Forum: Mikrocontroller und Digitale Elektronik Anfängerfrage zur bedingten Compilierung


von MHz (Gast)


Lesenswert?

Tach, wenn ich folgendes stehen habe:

#if HARDWARE < 2

HARDWARE aber nicht definiert wurde,

- wird dann HARDWARE als 0 angenommen
- oder ist der Ausdruck dann immer "false"
- oder ganz ander?

von B. S. (bestucki)


Lesenswert?

Ich nehme an, dass der Präprozessor einen Fehler erzeugen wird (hab's 
nicht getestet). Prüf doch vorher mit #ifdef, ob HARDWARE definiert 
wurde.

von Thomas E. (thomase)


Lesenswert?

MHz schrieb:
> Tach, wenn ich folgendes stehen habe:
>
> #if HARDWARE < 2
>
> HARDWARE aber nicht definiert wurde,
>
> - wird dann HARDWARE als 0 angenommen
> - oder ist der Ausdruck dann immer "false"
> - oder ganz ander?

"HARDWARE" ist nicht vorhanden und damit "false". Da "false" = 0 ist und 
0 < 2, ist die Bedingung true.

#if HARDWARE < 2
// Wird hier ausgeführt
#else

#endif

mfg.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

MHz schrieb:

> - wird dann HARDWARE als 0 angenommen

Genau dieses.  Hier das entsprechende Zitat aus dem C-Standard:

“… After all replacements due to macro expansion and the defined
unary operator have been performed, all remaining identifiers
(including those lexically identical to keywords) are replaced
with the pp-number 0, and then each preprocessing token is
converted into a token. The resulting tokens compose the
controlling constant expression which is evaluated according
to the rules of 6.6. …”

GCC würde bei -Wundef übrigens eine Warnung darüber ausspucken.

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.