strangest systems I've sent email from
Maciej W. Rozycki
macro at linux-mips.org
Mon May 23 09:40:53 CDT 2016
On Sun, 22 May 2016, Mouse wrote:
> > How can you have the type of `size_t' wider than the widest unsigned
> > integer type in the respective revision of the language standard?
>
> unsigned long long int isn't necessarily the largest integral type.
> Nor do I see anything requiring size_t to be no larger than it.
Right, an implementation is free to add its own extended integer types
and `size_t' is not required to have the same width as one of the standard
integer types. There's a recommendation for `size_t' not to be wider than
`long' (unless necessary, heh), however that's just it, not mandatory.
> uintmax_t, on the other hand, would be fine; it _is_ promised to be no
> smaller than size_t (or any other unsigned integral type).
>
> size_t foo = ~(uintmax_t)0;
>
> should work fine to set foo to all-bits-set. (Since size_t is
> unsigned, this will set it to be its largest possible value.)
But there's no `uintmax_t' in C89. If playing with casts already, I
think the most obvious solution is simply:
size_t foo = ~(size_t)0;
Maciej
More information about the cctalk
mailing list