[linux-l] Re: Das ist zum Teufel nicht Linux
Rocco Rutte
pdmef at cs.tu-berlin.de
So Feb 26 12:51:46 CET 2006
* Nico Golde <nion at gmx.net>:
>* Rocco Rutte <pdmef at cs.tu-berlin.de> [2006-02-25 19:58]:
>> Ein #ifdef ist nicht nur immer nur ein Bug, sondern mit Verstand
>> benutzt sogar immer ein Feature. ;-)
>Warum?
Zum Beispiel wenn man mehrere Bitflags an eine Funktion geben will:
#define FLAG_A (1<<0)
#define FLAG_B (1<<1)
Ohne Präprozessor müsste man für jede Abfrage, jedes Setzen/Toggle und
so weiter eine Funktion aufrufen, d.h. die Performance wäre im Keller.
Oder man benutzt gettext via _(X) und N_(X) Macros. Wenn man ein #define
dafür hat, benutzt man direkt die richtige Funktion bzw. benutzt
"plain" Strings wenn es ausgeschaltet ist. Ohne Präprozessor bräuchte
man eine Funktion mehr, die intern dann das "Ich will gettext"-Flag
auswertet. Die Performance wäre auch im Keller.
Oder die ganzen Magic-Numbers, für die man sonst read-only Variablen
bräuchte.
D.h. mit #define kann man durchaus Code für Menschen lesbarer machen
aber dem Compiler alle Optimierungsmöglichkeiten offen halten (z.B. bei
den Bitflags).
Wenn man aber damit anfängt optionale Features tief zu schachteln, dann
kann #define durchaus böse[tm] sein...
bye, Rocco
--
:wq!
Mehr Informationen über die Mailingliste linux-l