[linux-l] do{ . } while (0) (was: Arrays in C)

Oliver Bandel oliver at first.in-berlin.de
Do Nov 24 00:43:56 CET 2005


On Thu, Nov 24, 2005 at 12:01:48AM +0100, Jan-Benedict Glaw wrote:
> On Wed, 2005-11-23 23:51:35 +0100, Oliver Bandel <oliver at first.in-berlin.de> wrote:
> 
> > {}
> > ist ein Block in C.
> > Man kann am Anfang jedes Blockes auch lokale Variablen definieren...
> > ...wissen übrigens die wenigsten, weshalb sie das lokale Definieren
> > von Variablen als "++" von C++ darstellen (im ggs. zu C) ;-)
> 
> ...und viele derer, die es wissen, benutzen es wissentlich nicht. Ich
> finde es ganz schön, wenn man einmal, am Anfang der Funktion, sieht,
> welche Variablen benutzt werden. Mal schnell on the fly noch ein paar
> weitere benutzen zu können ist nett, erhöht aber IMHO nicht die
> Lesbarkeit.
[...]

Sehe ich genauso.
Ich benutze dieses "Feature" auch nicht.

Bei OCaml z.B. ist das was anderes, da die Variablen
eh alle lokal sind, wenn sie innerhalb
einer Funktion definiert sind, ansonsten sind sie
Compilation-Unit-global.

Aber in C ist es IMHO auch besser, wenn man alles am Anfang
definiert.

Auch mache ich es normalerweise so, daß ich jeden Pointer, den ich
irgendwann mal im Laufe der Funktion benutze, gleich am Anfang
schon auf NULL setze. Dann ist er in gewisser Weise in einem
definierten Zustand und ich kann mit NULL-Tests immer abchecken,
was Sache ist. (Ich chekce auch immer alle Args auf NULL,
was manche inem paranoid erscheint - aber für gute/solide SW-Entwicklung
braucht man diesen gewissen paranoiden Mindest-Zustand ;-))

Falls man nämlich aus irgend einem Grunde mal eine Funktion, die
den ersten Zuweisungsakt zu jenem Pointer unternimmt, auskommentiert
oder irgendwie anders verbaselt, dann hat man definitiv
seine NULL drinne. :)
(Und wenn andere Funktionen das immer schön abtesten, weiß man
 dann, wenn es an irgend einer Stelle statt eines Crashes eine
 Fehlermeldung gibt, daß da eine NULL erschien, die nicht erwartet wurde,
 wie weit Fehler in einer Source reichen können... "Das Weltall, unbekannte Tiefen...")

Das selbe gilt natürlich auch für andere Variablen:
int immer auf 0 definieren (außer ein anderer Wert
macht mehr Sinn), auch wenn man es anscheinend soweiso nochmal
zuweist... usw.



Gruß,
   Oliver



Mehr Informationen über die Mailingliste linux-l