Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 20 Aug 2002 18:28:49 -0700
From:      Jon Mini <mini@freebsd.org>
To:        Archie Cobbs <archie@dellroad.org>
Cc:        obrien@FreeBSD.ORG, freebsd-arch@FreeBSD.ORG
Subject:   Re: NULL
Message-ID:  <20020821012849.GK3751@elvis.mu.org>
In-Reply-To: <200208210101.g7L110m03801@arch20m.dellroad.org>
References:  <20020821002116.GA33223@dragon.nuxi.com> <200208210101.g7L110m03801@arch20m.dellroad.org>

next in thread | previous in thread | raw e-mail | index | archive | help
Archie Cobbs [archie@dellroad.org] wrote :

> When you say "not legal" do you mean it causes an error or a warning?
> 
> FYI, this question came up when porting some code to redhat Linux, where
> NULL is defined as (void *)0.

"Not legal" refers to the fact that C is a standardised language,
and this violates that standard. Whether or not it works in gcc is
irrellevant.

Also, NULL is defined as 0 in the standard, because this:

	void	*p;

	p = 0;

Is guaranteed to produce an invalid pointer, and this:

	((p != 0) || (p == 0))

Tests for a valid pointer and an invalid pointer, respectively.

The fact that pointers are linear addresses in FreeBSD and Linux
and that the address value 0x0 is used for NULL are just some of
the happy coincidences that the relevant standards can't rely on,
and must define as "implementation dependant."

On a related note, this :

	p = 1;

Is illegal.

I hope this makes sense.

-- 
Jonathan Mini <mini@freebsd.org>
http://www.freebsd.org/

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-arch" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20020821012849.GK3751>