Hi Bruno, > 2005-05-13 Bruno Haible <[EMAIL PROTECTED]> > > * stdint_.h (int64_t, uint64_t, int_least64_t, uint_least64_t, > int_fast64_t, uint_fast64_t, intmax_t, uintmax_t, INT64_MIN, INT64_MAX, > UINT64_MAX, INT_LEAST64_MIN, INT_LEAST64_MAX, UINT_LEAST64_MAX, > INT_FAST64_MIN, INT_FAST64_MAX, UINT_FAST64_MAX, INTMAX_MIN, > INTMAX_MAX, UINTMAX_MAX, INT64_C, UINT64_C, INTMAX_C, UINTMAX_C): > Add support for 64-bit integers in the MSVC compiler.
Hmm... I hadn't ever encountered those `i64' and `ui64' suffixes: > #define INT64_MIN (~INT64_MIN) > #define INT64_MAX 9223372036854775807LL > #define UINT64_MAX 18446744073709551615ULL > + #elif defined(_MSC_VER) > + #define INT64_MIN (~INT64_MIN) > + #define INT64_MAX 9223372036854775807i64 > + #define UINT64_MAX 18446744073709551615ui64 > #endif Then I saw them again in the following macros: > + #define INT64_C(x) x##i64 > + #define UINT64_C(x) x##ui64 > #endif What do you think about using those two macros like this? #if @HAVE_LONG_64BIT@ # define INT64_MIN (~INT64_MIN) # define INT64_MAX INT64_C(9223372036854775807) # define UINT64_MAX UINT64_C(18446744073709551615) #elif @HAVE_LONG_LONG_64BIT@ # define INT64_MIN (~INT64_MIN) # define INT64_MAX INT64_C(9223372036854775807) # define UINT64_MAX UINT64_C(18446744073709551615) #elif defined(_MSC_VER) # define INT64_MIN (~INT64_MIN) # define INT64_MAX INT64_C(9223372036854775807) # define UINT64_MAX UINT64_C(18446744073709551615) #endif Then, look carefully and you'll see that all three branches are the same, so you can condense them into one: #if @HAVE_LONG_64BIT@ || @HAVE_LONG_LONG_64BIT@ || defined _MSC_VER # define INT64_MIN (~INT64_MIN) # define INT64_MAX INT64_C(9223372036854775807) # define UINT64_MAX UINT64_C(18446744073709551615) #endif Jim P.S. It's easier to read cpp directives when the indentation after the `#' reflects the nesting level. _______________________________________________ bug-gnulib mailing list bug-gnulib@gnu.org http://lists.gnu.org/mailman/listinfo/bug-gnulib