[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