se...@seebs.net (Peter Seebach) writes:

> In message <200901212258.n0lmwqx07...@f7.net>, Karl Berry writes:
>>I am surprised.  I thought 0 was supposed to be a valid null pointer in
>>all contexts, without casting.
>
> 0 is a null pointer constant.  In a context where the language anticipates
> a pointer, a null pointer constant becomes a null pointer.  This means that
> it's normally safe to write 0 and expect the language to treat it as a null
> pointer, but it's quite possible to create contexts in which it isn't:
>
>       printf("%p\n", 0);
>
> This isn't guaranteed to work, because variable argument lists aren't
> prototyped, so the compiler has no knowledge that it has to convert the 0
> into a null pointer.
>
> In other contexts, it's pretty much useless to cast 0s.  Note that NULL could
> be the same, or it could be already converted to (void *), so it depends on
> the implementation whether:
>
>       printf("%p\n", NULL);
>
> is legit.  (Which means it's not portable...)

Indeed, and a quite realistic example of where this bug hits in practice
is with the version-etc module where the final NULL needs to be
explicitly casted to work properly on all systems, e.g.:

      version_etc (stdout, "gsasl", p, gsasl_check_version (NULL),
                   "Simon Josefsson", (char *) NULL);

/Simon


Reply via email to