Date: Wed, 21 Aug 2002 00:31:12 -0600 (MDT) From: "M. Warner Losh" <imp@bsdimp.com> To: archie@dellroad.org Cc: freebsd-arch@FreeBSD.ORG Subject: Re: NULL Message-ID: <20020821.003112.86889670.imp@bsdimp.com> In-Reply-To: <200208210140.g7L1eCJ03992@arch20m.dellroad.org> References: <20020821012849.GK3751@elvis.mu.org> <200208210140.g7L1eCJ03992@arch20m.dellroad.org>
next in thread | previous in thread | raw e-mail | index | archive | help
In message: <200208210140.g7L1eCJ03992@arch20m.dellroad.org>
Archie Cobbs <archie@dellroad.org> writes:
: Are you saying that POSIX declares that NULL be "0"? Then I agree
: we must do that.. but why then doesn't Linux?
ISO-C99 says that '#define NULL 0' is standards compliant. Looks like
(void *) 0 is also legal in 'C' for NULL (per 6.3.2.1.#3). NULL is
*A* null pointer constant, and both '0' and '(void *) 0' are null
pointer constants.
However, for C++ NULL must be 0. It can't be (void *) 0 because
int *a = NULL;
would break and people expect that to work.
We have to define NULL in 7 headers:
7.11 Localization <locale.h>
7.17 Common definitions <stddef.h>
7.19 Input/output <stdio.h>
7.20 General utilities <stdlib.h>
7.21 String handling <string.h>
7.23 Date and time <time.h>
7.24 Extended multibyte and wide-character utilities <wchar.h>
We could find _BSD_NULL_ the same place we define _BSD_SIZE_T_ and
then define NULL to _BSD_NULL_, but that sounds like overkill to me.
From the C-99 draft standard:
6.3.2.1 #3:
[#3] An integer constant expression with the value 0, or
such an expression cast to type void *, is called a null
pointer constant.46) If a null pointer constant is assigned
to or compared for equality to a pointer, the constant is
converted to a pointer of that type. Such a pointer, called
a null pointer, is guaranteed to compare unequal to a
pointer to any object or function.
46)The macro NULL is defined in <stddef.h> as a null pointer
constant; see 7.17.
...
K.3 Implementation-defined behavior
[#1] A conforming implementation shall document its choice
of behavior in each of the areas listed in this subclause.
The following are implementation-defined:
...
-- The null pointer constant to which the macro NULL
expands (7.17).
Warner
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?20020821.003112.86889670.imp>
