Sujet : Re: question about nullptr
De : Keith.S.Thompson+u (at) *nospam* gmail.com (Keith Thompson)
Groupes : comp.lang.cDate : 07. Jul 2024, 08:04:40
Autres entêtes
Organisation : None to speak of
Message-ID : <87bk39u1h3.fsf@nosuchdomain.example.com>
References : 1 2 3 4
User-Agent : Gnus/5.13 (Gnus v5.13)
Lawrence D'Oliveiro <
ldo@nz.invalid> writes:
On Sat, 6 Jul 2024 14:51:19 +0100, bart wrote:
Using actual zero for a pointer value is crass. This wouldn't work for
example:
char *p = 3;
>
But of course this does:
>
char *p = 0;
>
From the C23 spec, I found this footnote in §6.6:
>
A named constant or compound literal constant of integer type and
value zero is a null pointer constant. A named constant or
compound literal constant with a pointer type and a value null is
a null pointer but not a null pointer constant; it may only be
used to initialize a pointer object if its type implicitly
converts to the target type.
>
That first sentence is so important, you’d think it would be in the main
text somewhere.
The definition of "null pointer constant" is in N3220 6.3.2.3,
(Conversions, Other operands, Pointers):
An integer constant expression with the value 0, such an expression
cast to type void *, or the predefined constant nullptr is called a
*null pointer constant*.
6.6 makes it clear that named constants and compound literal constants
of integer type are integer constant expressions.
-- Keith Thompson (The_Other_Keith) Keith.S.Thompson+u@gmail.comvoid Void(void) { Void(); } /* The recursive call of the void */