Liste des Groupes | Revenir à cl c |
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((void*)0)
into a null pointer constant ... 0 and (void*)0 are the
two most likely and common choices.
>
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."
Les messages affichés proviennent d'usenet.