Re: Portabilität: NULL

Datumsansicht Baumansicht Betreffansicht Attachement-Sicht

Autor: Christian Weisgerber (naddy_at_mips.inka.de)
Datum: 16. Aug 2002


Alexander Holler <holler_at_ahsoftware.de> wrote:

> Wenn jetzt z.B. ne Hardware daherkommt (was ich als eigentliche
> "Anekdote" erzählen wollte), die Unterschiede bei Zeigern auf
> verschieden Typen hat, muss ein (void*)0 bei einer Konvertierung
> in einen Interger nicht unbedingt 0 ergeben.

Das ist nach ANSI/ISO-C korrekt.
Allerdings ist die Konstante »0« magisch. Gegegeben:

   foo_t *p;

Ein Vergleich

   p == 0

ist per Definition identisch zu

   p == (foo_t *)0

auch, wenn (foo_t *)0 vielleicht intern als 0xFFFFFFF dargestellt
wird. Das gilt auch für den impliziten Vergleich mit 0

   if (!p) ...

und für Zuweisungen.

> Wenn die Hardware z.B. 1 Byte zur Unterscheidung des Zeigertyps
> benutzt (d.h. code* =0x01nnnnn, daten* = 0x02nnnnn) dann kann das
> schiefgehen.

Tagged Pointers. LISP-Maschinen hatten das. Im SPARC-Befehlssatz
findet sich auch noch ein Überbleibsel davon. Ist seit zwanzig
Jahren wieder aus der Mode.

-- 
Christian "naddy" Weisgerber                          naddy_at_mips.inka.de

Datumsansicht Baumansicht Betreffansicht Attachement-Sicht

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