006
08.05.2008, 13:13 Uhr
0xdeadbeef
Gott (Operator)
|
Eigentlich sollte der Präprozessor
C++: |
#ifdef __WIN32__ || _MS_DOS_ || WIN32 || MS_DOS
|
gar nicht annehmen. Die Syntax für #ifdef-Direktiven ist
Zitat von C++-Standard, Sektion 16: |
#ifdef identifier new-line group(opt)
|
...wobei group eine weitere Präprozessor-Direktiven-Gruppe bezeichnen kann. Der Hintergrund in der Spezifikation ist, dass #if-sections ein #endif brauchen. Ein Identifier ist definiert als
Zitat von C++-Standard, Sektion 2.10: |
Code: |
identifier: nondigit identifier nondigit identifier digit
|
(Die Code-Tags hier nur, um die Einrückung zu erhalten)
|
...das bedeutet im Grunde das selbe wie in Variablennamen auch.
In der Praxis bedeutet das
C++: |
#ifdef FOO // richtig #ifdef FOO10 // richtig #ifdef 1 // Falsch #ifdef FOO || BAR // Falsch
|
...und zwar jeweils auf Syntaxebene. Semantik ist für die falschen Ausdrücke dementsprechend nicht mehr definiert, das heißt, wenn dein Präprozessor das akzeptiert, ist im C++-Standard nicht vorgegeben, was er daraus macht. Es ist stumpf und einfach falsch. -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe Dijkstra Dieser Post wurde am 08.05.2008 um 13:14 Uhr von 0xdeadbeef editiert. |