Subject: Re: build broken at usr.bin/fstat
To: Ross Harvey <ross@teraflop.com>
From: None <seebs@plethora.net>
List: current-users
Date: 07/16/1998 19:32:56
In message <199807162242.PAA02561@random.teraflop.com>, Ross Harvey writes:
>	The problem:

		printf("%d", sizeof something);

>	The compiler issues a warning in 64-bit environments, the reason
>	the warning doesn't always happen:

>		sizeof returns type size_t, which is an int in ILP32,
>		but a long in LP64

It doesn't matter, it's wrong anyway.  It's an *UNSIGNED* int, and,
if we're going to pick nits, it is *not* permissible (in C89, with
the most recent set of rulings, I think) to pass an unsigned anything
to %d.

>		A.  Cast to (void *) and use %p

This is very surprising, and not (IMHO) well defined.

>		B.  Cast to (int) or (unsigned int)

I like this one.

>		C.  Cast to (long) or (unsigned long) and use %ld

I also like this one.

However, if you want to use (unsigned long), use %lu.

-s