Al Viro wrote:
> On Wed, May 23, 2007 at 01:02:34AM +0100, Al Viro wrote:
>> It would be nicer if C had __null__ as the *only* null pointer constant
>> (with flexible type) and could refuse to accept anything else. Too late
>> for that, unfortunately. As for conversions - see above.
>
> To clarify: all mess with null pointer constants comes from lack of
> explicit token and need to avoid massive breakage of old programs. That's
> what it's all about - compiler recognizing some subexpressions as
> representations of that missing token and trying to do that in a way that
> would break as little as possible of existing C code. It's an old story -
> decisions had to be made in 80s and now we are stuck with them.
>
> IOW, (void *)0 in contexts that allow null pointer constant is *not* a
> 0 cast to pointer to void; it's a compiler-recognized kludge for __null__.
> And it's not a pointer to void. It can become a pointer to any type,
> including void. If converted to a pointer type it gives the same value
> you get if you convert 0 to that type ("null pointer to type"). But
> unlike null pointer to type it retains full flexibility.
>
> NULL is required to expand to null pointer constant and that's one of
> the reasons why sane code should be using it instead of explicitly spelled
> variants. The next best thing to actually having __null__ in the language...That makes perfect sense now. Thanks for the explanation. - Josh Triplett
signature.asc
Description: OpenPGP digital signature
