[Dune] NULL und 0 in C++.

Thimo Neubauer thimo at debian.org
Wed Jun 16 14:03:51 CEST 2004


On Wed, Jun 16, 2004 at 01:41:48PM +0200, Oliver Sander wrote:
> > Thimo Neubauer wrote:
> > > Aus der 4. Auflage Stroustrup "§ 5.1.1 Null":
> > >
> > > "In C war es populär, ein Makro NULL zu definieren, um den Nullzeiger
> > > zu repräsentieren. Durch die engere Typprüfung von C++ führt die
> > > Benutzung der einfachen 0 anstelle des NULL-Makros zu weniger
> > > Problemen. Wenn Sie meinen, NULL definieren zu müssen, dann benutzen
> > > Sie:
> > >
> > >   const int NULL = 0;
> > Ist das ok, in Dune diese Definition von NULL zu machen?

Können wir machen, aber es ist ja eigentlich nur ein Hack... Zumal es
mit anderen libs kollidieren könnte, es sei denn, wir definieren
Dune::NULL... und da würde ich schon eher ein Skript über die Sourcen
laufen lassen, das NULL in 0 ändert. Ich sehe keinen Vorteil darin,
die Sourcen "C-kompatibel" zu halten. Das geht sowieso nicht, weil der
C-Präprozessor das Schlüsselwort "NULL" natürlich eiskalt ersetzt. Bei
einem Testprogramm

  #include <stdlib.h>

  const int NULL = 0;

hat mir gcc -E erwartungsgemäss

  const int ((void *)0) = 0;

ausgespuckt :) 

> Wäre das denn portabel?  Was wäre denn, wenn man sich auf
> einem System befindet, wo ein ungültiger Zeiger nicht 0x0 ist?
> Laut Thimo gibt es sowas ja.

Die 0 in C++ bedeutet nicht "die Pointer-Adresse 0x0" sondern wird
(wenn ich's richtig verstehe) bei Zeigervergleichen geschickt gecastet
und erhält so die Bedeutung "ungültiger Zeigerwert", ist also sogar
sicherer. Wir können auf jeden Fall froh sein, dass Stroustrup die 0
genommen hat und es nicht wie bei den Stringpositionen mit
string::npos ist :)

Gruss
  Thimo




More information about the Dune mailing list