> The ISO/IEC 9899:1999 C standard defines NULL as "an
> implementation-defined null pointer constant" - no more, no less.

Right.  Now go look at 6.3.2.3: "An integer constant expression with
the value 0, or such an expression cast to type void *, is called a
null pointer constant.".

I see no leeway there.

> It does say that the integer value 0 may be treated as a null
> pointer, but does not say that it can be a suitable expansion of the
> NULL macro.

I think it does.  7.17 says NULL is defined to a null pointer constant,
and 6.3.2.3 defines what a "null pointer constant" is, one of the
options for which is unadorned 0.

> It doesn't say it cannot - the implementation may choose to do so if
> that results in NULL being a null pointer constant in all contexts.

NULL *is* a "null pointer constant" in all contexts.  But a "null
pointer constant" does not necessarily have any particular type.  In a
context which provides a pointer type, a null pointer constant is
converted to a null pointer of the appropriate type.  In a context
which does not provide a type, you can get either integer zero or a
void * null pointer - which are not necessarily the same in size, bit
pattern, alignment, nor even parameter passing mechanism.

/~\ The ASCII                           der Mouse
\ / Ribbon Campaign
 X  Against HTML               [EMAIL PROTECTED]
/ \ Email!           7D C8 61 52 5D E7 2D 39  4E F1 31 3E E8 B3 27 4B


_______________________________________________
geda-dev mailing list
[email protected]
http://www.seul.org/cgi-bin/mailman/listinfo/geda-dev

Reply via email to