Forum: Mikrocontroller und Digitale Elektronik Vergleich mit #define


von Jakob (Gast)


Lesenswert?

Hallo,

ich habe ein für mich komischen Problem mit defines:

Ich definiere:
1
#define    NEWID    0x10;

Dann kann ich das mit
1
flags |= NEWID;
auf etwas zuweisen.

Wenn ich das allerdings in einer if Abfrage prüfen will nimmt der 
Compiler das nicht an:
1
if (flags & NEWID){
2
...
3
}

Wieso ist das so?
Vielen Dank schon mal
Jakob

von Stefan E. (sternst)


Lesenswert?

Was genau soll "nimmt der Compiler das nicht an" heißen?

von Rolf Magnus (Gast)


Lesenswert?

Der Präprozessor nimmt eine reine Text-Ersetzung vor. Überall, wo der 
Makro-Name vorkommt, wird er durch das ersetzt, was dahinter steht.
Also wird aus deinem Code:
1
flags |= 0x10;;

und
1
if (flags & 0x10;){
2
...
3
}

Während beim ersten Fall das zusätzliche Semikolon nicht stört, tut es 
das im zweiten Fall sehr wohl.

von Jakob (Gast)


Lesenswert?

Hallo Rolf,

jaaaaa genau das war es... Vielen vielen Dank! Wär ich nie drauf 
gekommen...

Frohe Weihnachten!
Jakob

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.