avoiding incorrect code

Barry Smith bsmith at mcs.anl.gov
Wed Jan 14 17:45:30 CST 2009


   Interesting I didn't know this. So now even anal people can use if  
(!ptr)
Thanks.

    Barry

On Jan 14, 2009, at 5:28 PM, Jed Brown wrote:

> On Wed, Jan 14, 2009 at 13:56, Barry Smith <bsmith at mcs.anl.gov> wrote:
>> All of this demonstrates that it would be legal that that (!ptr) is  
>> not
>> correct and one should always use if (ptr == NULL).
>
> FWIW, C99, 6.5.3.3.5 reads
>
> | The result of the logical negation operator ! is 0 if the value of
> its operand compares
> | unequal to 0, 1 if the value of its operand compares equal to 0. The
> result has type int.
> | The expression !E is equivalent to (0==E).
>
> In (0 == ptr) the 0 is a null pointer constant (as per 6.5.9.2 `one
> operand is a pointer and the other is a null pointer constant') so
> there is no reason to prefer (ptr == NULL).  Note that in C++, NULL is
> a macro which expands to 0, not (void*)0 as is common in C, so that it
> doesn't need an explicit cast.
>
> Jed




More information about the petsc-dev mailing list