From: Markus S. <MS...@de...> - 2005-09-20 14:33:45
|
> From: "Luke Dunstan" <cod...@ho...> > To: <min...@li...> > Subject: Re: [Mingw-users] Using %I64 in printf and avoiding compiler warnings > Date: Mon, 19 Sep 2005 23:04:13 +0800 > Reply-To: min...@li... > > > ----- Original Message ----- > From: "Markus Selve" <MS...@de...> > To: <min...@li...> > Sent: Saturday, September 17, 2005 6:39 AM > Subject: [Mingw-users] Using %I64 in printf and avoiding compiler warnings > > > > Does anyone have an idea how to choose between %llx , %lld and %I64x, > > %I64d > > in just one central position? One possibility would of course be, to write > > an own printf, that contains the #ifdef __MINGW32_ ... #elif and calls > > the libraries printf. But that would even have to parse, if it was called > > with %llx or %lld. But maybe there is a simpler way? > > > > Markus. > > > #ifdef __MINGW32__ > #define INT64_FORMAT "I64" > #else > #define INT64_FORMAT "ll" > #endif > > > printf("longlongI64x=%" INT64_FORMAT "x length=%d\n", ttt, sizeof(ttt)); > Yes, thanks. That's actually what the inttypes.h does, that Danny suggested. Thank you for the hint, Danny. It defines macros like PRIX64. The mingw inttypes.h defines for example PRIX64 as %I64X and the inttypes.h on a Unix machine defines it as %llX. You are right: Not highly readable, but the way to go, if we want it to compile on different platforms. I also installed gcc 3.4.4 mingw special edition as Danny suggested. This gcc does not complain about an %I64X in the printf's anymore. I had to add "ull" to some long-long-literals. Now it's compiling without warnings and so far it seems to work also. Thanks, Danny. Markus. |