Is "if (!pointer)" as portable as "if (pointer == NULL)" ???

Karl Heuer karl at
Thu Apr 12 02:40:29 AEST 1990

In article <656 at hades.OZ> greyham at hades.OZ (Greyham Stoney) writes:
>But can you also just do an aritmetic check on the cast value of the pointer?:


>K&R says that casting anything with a value 0 to a pointer yeilds a NULL
>pointer; so presumably casting a NULL pointer back to value yeilds a zero.

Not necessarily.

>	if (buffer = malloc(50))	/* yes, that SHOULD be =, not == */
>	if (buffer) free(buffer)

But these are acceptable (if you like that style, which I don't).  You seem to
believe that `if (buffer)' means `if ((int)buffer != 0)' (which would not be
a valid test), but in fact it means `if (buffer != (char *)0)' (which is quite

Karl W. Z. Heuer (karl at or harvard!ima!karl), The Walking Lint

More information about the Comp.lang.c mailing list