Vergleich mit #define

Gast #1528998
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
Gast #1529004
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren