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.sources.bugs
mailing list