Liste des Groupes | Revenir à cl c |
"Chris M. Thomasson" <chris.m.thomasson.1@gmail.com> writes:It was a bit of pseudo code. Here is a program:
p = nullptr;(p having been declared void *)
(0 == p == nullptr == NULL == 0) == true ?You are missing that 0 == p == nullptr == NULL == 0 does not mean what
>
Am I missing something here? If so, here is a preemptive: Shit!
you want! It means
(((0 == p) == nullptr) == NULL) == 0
and that is a constraint violation.
Why? Well 0 == p has value 1 and is of type int and equality
comparisons between int and nullptr_t values (of which there is only
one) are not permitted. Catching this sort of thing is one of the
benefits of nullptr and its associated type nullptr_t. It means that
while
#define nullptr ((void *)0)
can help to get C23 code to compile with a pre-C23 compiler, it might
result in some C23 constraint violations going undetected.
Anyway, that aside, I know what you meant. To clarify, all of the
following have the value 1:
0 == p
p == nullptr
nullptr == NULL
NULL == 0
0 == nullptr
!p
Note that 0 == nullptr /is/ allowed even though 0 has type int. That is
because 0 is also a null pointer constant, and the rules for == and !=
specifically allow it.
Les messages affichés proviennent d'usenet.