Sujet : Re: question about nullptr
De : jameskuyper (at) *nospam* alumni.caltech.edu (James Kuyper)
Groupes : comp.lang.cDate : 26. Aug 2024, 04:45:46
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <vagtpa$2ahdn$1@dont-email.me>
References : 1 2 3 4 5 6 7 8 9 10 11 12 13 14
User-Agent : Mozilla Thunderbird
On 8/25/24 21:18, Keith Thompson wrote:
James Kuyper <jameskuyper@alumni.caltech.edu> writes:
On 8/25/24 16:56, dave_thompson_2@comcast.net wrote:
On Wed, 10 Jul 2024 11:09:41 -0400, James Kuyper
<jameskuyper@alumni.caltech.edu> wrote:
>
NULL is required to expand
into a null pointer constant ... 0 and (void*)0 are the
two most likely and common choices.
>
((void*)0)
Otherwise NULL["foo"] gives quite the wrong result
>
Correct. Sorry.
>
A mostly meaningless price of trivia: In C17 and earlier, an excessively
literal reading of the standard implies that ((void*)0) is not a null
pointer constant. It says that a null pointer constant is "An integer
constant expression with the value 0, or such an expression cast to type
void *". It does not say that a parenthesized null pointer constant is
a null pointer constant. (And (void*)0 is a null pointer constant but
not a valid definition for NULL.)
>
C23 fixes this by updating the wording for parenthesized expressions.
>
C17: "A *parenthesized expression* is a primary expression. Its type and
value are identical to those of the unparenthesized expression. It is an
lvalue, a function designator, or a void expression if the
unparenthesized expression is, respectively, an lvalue, a function
designator, or a void expression."
>
C23: "A *parenthesized expression* is a primary expression. Its type,
value, and semantics are identical to those of the unparenthesized
expression."
I remembered that you had raised this issue before, and I think my
memory of that issue is what led me to leave out the outer parentheses.
I'm glad to know that they cleared it up.