Paul Eggert wrote:
> > : ((((zero) + 1) << ((bits) ? (bits) - 1 : 0)) - 1) * 2 + 1)
>
> Hmm, that's not quite right either, surely you meant (bits) - 2.
No, it appears correct as it is. For example, if bits==32, it will be
((1U << 31) - 1) * 2 + 1)
= (0x7fffffffU * 2 + 1)
= 0xffffffffU
> But I now thought of a simpler definition. _STDINT_MAX needs only
> two arguments, and can be simplified to:
>
> /* _STDINT_MAX relies on the signedness of 'zero' to return the
> correct type. */
> #define _STDINT_MAX(bits, zero) (~ _STDINT_MIN (1, bits, zero))
Are you sure this will work for bits < 32? For example, for bits==16
it will evaluate to 0xffffffffU, not 0xffffU.
> OK, I'll change it to this, which follows the advice you gave:
>
> #define int_fast8_t long int
> #define uint_fast8_t unsigned int_fast8_t
> #define int_fast16_t long int
> #define uint_fast16_t unsigned int_fast16_t
> #define int_fast32_t long int
> #define uint_fast32_t unsigned int_fast32_t
Thanks. That should be fine on all systems.
Bruno
_______________________________________________
Bug-cvs mailing list
[email protected]
http://lists.nongnu.org/mailman/listinfo/bug-cvs