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
Attachment:
signature.asc
Description: OpenPGP digital signature