Simon, you contacted me about ac_create_stdint_h.m4 - no success with it? -- guido
Es schrieb Paul Eggert: > > > From: "Simon Waters" <[EMAIL PROTECTED]> > > Date: Thu, 21 Feb 2002 02:31:30 -0000 > > > I need to define 32 and 64 bit integer types in reasonably portable C. > > I assume you mean exact-width 32 and 64 bit types. The C standard > does not require the existence of such types; for example, you might > be on a 36-bit host that has 36-bit int and 72-bit long. However, > such machines are admittedly rare these days. > > > Linux can include "inttypes.h" these days, so I'm happy to rename to the = > > "standard" names. > > Yes, that's the better way in the long run. The standard names will > take over eventually. > > > Is there an autoconf example to follow?=20 > > Not that I know of. I would put this into configure.ac: > > AC_CHECK_HEADERS(inttypes.h limits.h stdint.h) > > and put something like the following into my C code: > > #include <config.h> > > #if HAVE_LIMITS_H > # include <limits.h> > #endif > > #if HAVE_INTTYPES_H > # include <inttypes.h> > #else > # if HAVE_STDINT_H > # include <stdint.h> > # endif > #endif > > #ifndef INT32_MAX > # if INT_MAX == 2147483647 > # define int32_t int > # define INT32_MAX 2147483647 > # else > # if LONG_MAX == 2147483647 > # define int32_t long > # define INT32_MAX 2147483647L > # else > This code assumes the existence of 32-bit exact-width > integers, and will not work on machines that lack such a type. > # endif > # endif > #endif > > /* Avoids integer overflow on 32-bit hosts. */ > # define EQUALS_INT64_MAX(x) \ > ((x) / 65536 / 65536 == 2147483647 && (x) % 2147483647 == 1) > > #ifndef INT64_MAX > # if EQUALS_INT64_MAX (INT_MAX) > # define int64_t int > # define INT64_MAX 9223372036854775807 > # else > # if EQUALS_INT64_MAX (LONG_MAX) > # define int64_t long > # define INT64_MAX 9223372036854775807L > # else > # if EQUALS_INT64_MAX (LLONG_MAX) > # define int64_t long long > # define INT64_MAX 9223372036854775807LL > # else > This code assumes the existence of 64-bit exact-width > integers, and will not work on machines that lack such a type. > # endif > # endif > # endif > #endif > > Admittedly EQUALS_INT64_MAX is a bit tricky. Perhaps something like > this should be turned into an autoconf macro, though we probably need > more experience. I'll CC this message to [EMAIL PROTECTED] to see if > there are other opinions. > > > This is a multi-part message in MIME format. > > Please send text mail as plaintext; it saves me time. Thanks. -- guido http://freespace.sf.net/guidod GCS/E/S/P C++/++++$ ULHS L++w- N++@ d(+-) s+a- r+@>+++ y++ 5++X- (geekcode)