delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2008/10/31/21:54:08

X-Recipient: archive-cygwin AT delorie DOT com
X-Spam-Check-By: sourceware.org
From: "Gary R. Van Sickle" <g DOT r DOT vansickle AT worldnet DOT att DOT net>
To: <cygwin AT cygwin DOT com>
References: <490A30C8 DOT 5000107 AT sh DOT cvut DOT cz> <001601c93b31$a961b940$4001a8c0 AT mycomputer> <003e01c93b42$e92a17a0$4001a8c0 AT mycomputer> <490AE8A0 DOT 8090009 AT sh DOT cvut DOT cz> <001a01c93b4d$617de150$4001a8c0 AT mycomputer> <490AF1E3 DOT 3020308 AT sh DOT cvut DOT cz> <007401c93b56$ebcfa510$4001a8c0 AT mycomputer> <490B0084 DOT 1070803 AT sh DOT cvut DOT cz> <008a01c93b5a$9338d300$4001a8c0 AT mycomputer> <490B078B DOT 9030007 AT byu DOT net> <20081031135011 DOT GB15518 AT calimero DOT vinschen DOT de> <490B21E9 DOT 80807 AT lysator DOT liu DOT se> <011601c93b6e$49bbb710$4001a8c0 AT mycomputer>
Subject: RE: cygwin g++ strictness
Date: Fri, 31 Oct 2008 21:53:13 -0500
Message-ID: <C3BB70F1C28D4F21A629574504178AB1@DFW5RB41>
MIME-Version: 1.0
X-Mailer: Microsoft Office Outlook 11
In-Reply-To: <011601c93b6e$49bbb710$4001a8c0@mycomputer>
X-IsSubscribed: yes
Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Id: <cygwin.cygwin.com>
List-Unsubscribe: <mailto:cygwin-unsubscribe-archive-cygwin=delorie DOT com AT cygwin DOT com>
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sourceware.org/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/ml/#faqs>
Sender: cygwin-owner AT cygwin DOT com
Mail-Followup-To: cygwin AT cygwin DOT com
Delivered-To: mailing list cygwin AT cygwin DOT com

> From: John Emmas
> 
> ----- Original Message -----
> From: "Peter Rosin"
> Sent: 31 October 2008 15:19
> Subject: Re: cygwin g++ strictness
> >
> > I some projects I'm involved with there's quite a bit of 
> the following:
> >
> > [...]
> >
> > int.c:6: warning: int format, int32_t arg (arg 2)
> >
> I must confess, this has been a source of irritation for me 
> too but at least it doesn't stop the build.  It does however 
> bring us back to the fundamental question - when programming 
> like this:-
> 
> int32_t i = 32;
> printf("%d", i);
> 
> is it reasonable for a programmer to assume that a type 
> declared as int32_t will be compatible with "%d" when 
> building for a 32-bit platform?

No.  The only reasonable assumption to make in a case like this is that if
you don't do it right, you'll end up doing it over.  "%d" means "int".  You
use that to print an int.  If you have something that is not an int, and you
want to print it, then you have exactly two reasonable choices:

1.  Cast whatever you have to an int, then use "%d" to print it.
2.  Use the proper format specifier, and pass whatever you have to directly
printf() (i.e. un-casted).

In this particular instance, #1 is the wrong choice, since you have no
guarantee that an int can contain an int32_t.  You are left with #2, which
is not only the correct answer, but the path of least resistance as well.
Everybody wins!

>  I'd be surprised if there's 
> a programmer amongst us who can honestly say he wouldn't have 
> made that assumption.
> 

Be surprised ;-).

> John 
> 

-- 
Gary R. Van Sickle


--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Problem reports:       http://cygwin.com/problems.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019