Re: Portabilität: NULL

Datumsansicht Baumansicht Betreffansicht Attachement-Sicht

Autor: Alexander Holler (holler_at_ahsoftware.de)
Datum: 16. Aug 2002


Oh man, immer diese Ungläubigen, die immer gleich versuchen ein Regelwerk
zu zitieren. ;)

--On Freitag, August 16, 2002 08:30:28 +0200 Mathias Waack
<mathias_at_atoll-net.de> wrote:

> On Friday 16 August 2002 04:15, Alexander Holler wrote:
>> Die NULL in C(++) ist nicht unbedingt gleich 0. Es ist zwar ziehmlich
>> unmöglich alle Programme dahingehend anzupassen (wer macht nicht lieber
>> if(!var) anstatt if (var != NULL) aber es gibt eine Hardware (kann mich
>> nicht mehr entsinnen welche) bei der NULL != 0 ist.
>
> Also in C++ funktioniert das mit Sicherheit immer aufgrund der strengeren
> Typregeln. Die meisten Styleguides empfehlen die Benutzung von 0 anstelle
> von NULL. NULL ist ein C-Relikt welches in C++ nicht benutzt werden
> sollte. In C siehts dann so aus:
>
> 6.3.2.3 Pointers
> 3 An integer constant expression with the value 0, or such an expression
> cast to type void *, is called a null pointer constant.55) If a null
> pointer constant is converted to a pointer type, the resulting pointer,
> called a null pointer, is guaranteed to compare unequal to a pointer to
> any object or function.
> 4 Conversion of a null pointer to another pointer type yields a null
> pointer of that type. Any two null pointers shall compare equal.
>
> 55) The macro NULL is defined in <stddef.h> (and other headers) as a null
> pointer constant; see 7.17.

Ich darf das mal erklären. Oben steht das NULL als (void *)0 definiert
werden darf.

Schon alleine eine Definition von NULL als (void *)0 bringt zumindest eine
Menge Warnungen wenn nicht gar Fehler bei der meisten Software mit sich
(z.B. FILE* p = NULL -> FILE* P = (void)0).

Und ich bezweifel, daß es ein Definition gibt, die besagt das (void*)0 ==
(int)0 oder (long)0 ist. Eine Definition ob (void *)0 logisch als unwahr zu
betrachten ist, könnte ich mir schon eher vorstellen, aber auch da hätte
ich meine Zweifel.

> Also wenn ich das richtig verstehe ist entweder Deine Erinnerung oder
> Deine damalige Software broken;)

Lesen und verstehen sind 2 paar Schuhe. ;)

Und zum Glück hatte ich nie mit solcher Hardware zu tun, ich schrieb
lediglich das es eine solche Hardware gibt (d.h. (void *)0 != (int)0). Ich
habe nur davon gelesen.

Gruß,

Alexander


Datumsansicht Baumansicht Betreffansicht Attachement-Sicht

Dieses Archiv wurde generiert von hypermail 2.1.4 : 16. Aug 2002 CEST