pointer checking

Randell E. Jesup jesup at pawl20.pawl.rpi.edu
Wed Feb 17 17:56:17 AEST 1988


In article <228 at gandalf.littlei.UUCP> martin at littlei.UUCP (martin) writes:
>I do not want to start another net wars, but I am tired of seeing
>people write programs that are non-portable between C compilers.

>If you look at the source you will see that the authors blatenly
>compaired pointers to zero without thinking what happens if
>sizeof(ptr) != sizeof(int).  I know that C does not gripe if
>you do something like this, but can't people program better?

>char *ptr;

>if (ptr) {		/* WRONG !!!!!! */
>    do something
>}

>if (ptr != (char *)NULL) { 	/* RIGHT !!!!!! */
>    do something
>}

	Excuse me, nothing seems wrong to me with "if (ptr)".  From K&R,
page 52:
	"Since an if simply tests the numeric value of an expression, certain
coding shortcuts are possible.  The most obvious is writing
		if (expression)
instead of
		if (expression != 0)"

Also, from K&R page 192:
	"... it is guaranteed that assignment of the constant 0 to a pointer
will produce a null pointer distinguishable from a pointer to any object."

So, NULL must be equivalent to 0.

I will note that there are a couple of broken compilers out there that MIGHT
get this wrong.  However, it is most certainly absolutely correct C.

You are right, however, to note that there are far too many programs that
assume sizeof(int) == sizeof(pointer), and that this breaks things (or assume
that sizeof(int) == sizeof(long))!

     //	Randell Jesup			      Lunge Software Development
    //	Dedicated Amiga Programmer            13 Frear Ave, Troy, NY 12180
 \\//	beowulf!lunge!jesup at steinmetz.UUCP    (518) 272-2942
  \/    (uunet!steinmetz!beowulf!lunge!jesup) BIX: rjesup



More information about the Comp.lang.c mailing list