By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
448,574 Members | 1,199 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 448,574 IT Pros & Developers. It's quick & easy.

stdint.h and portability

P: n/a
I wonder how portable the exact width types defined by stdint.h are. I guess
target platforms are not required to actually have all those types, right?
What happens in that case?
Feb 28 '06 #1
Share this Question
Share on Google+
4 Replies


P: n/a

copx wrote:
I wonder how portable the exact width types defined by stdint.h are. I guess
target platforms are not required to actually have all those types, right?
What happens in that case?


There are certain types in stdint.h that are required, and every
implementation has to provide them. The rest is left for the particular
implementation, and you obviously can't guarentee portability of those.
Have a look in the standard for a list of required types.

Feb 28 '06 #2

P: n/a
"copx" <in*****@invalid.com> wrote:
I wonder how portable the exact width types defined by stdint.h are. I guess
target platforms are not required to actually have all those types, right?
Right. Except that if an implementation provides an (unsigned) integer
type of 8, 16, 32 or 64 bits, no matter what it is or how it is named,
it must also provide the corresponding (u)intN_t typedef in <stdint.h>.
If it does not otherwise provide a particular size integer, it needn't
define the typedef, and typedefs of any other size are completely
optional.
What happens in that case?


They aren't there, and you can use #ifdef INT64_MIN (for example) to
test this. If the implementation provides these optional exact-width
typedefs, it must also #define these macros in <stdint.h>; if it does
not provide a typedef, it must not #define the corresponding macro.

Or you could use (u)int_leastN_t or (u)int_fastN_t, which are required
to exist for N equals 8, 16, 32 and 64, regardless of which other types
exist.

Richard
Feb 28 '06 #3

P: n/a

"Richard Bos" <rl*@hoekstra-uitgeverij.nl> schrieb im Newsbeitrag
news:44****************@news.xs4all.nl...
"copx" <in*****@invalid.com> wrote:
I wonder how portable the exact width types defined by stdint.h are. I
guess
target platforms are not required to actually have all those types,
right?


Right. Except that if an implementation provides an (unsigned) integer
type of 8, 16, 32 or 64 bits, no matter what it is or how it is named,
it must also provide the corresponding (u)intN_t typedef in <stdint.h>.
If it does not otherwise provide a particular size integer, it needn't
define the typedef, and typedefs of any other size are completely
optional.
What happens in that case?


They aren't there, and you can use #ifdef INT64_MIN (for example) to
test this. If the implementation provides these optional exact-width
typedefs, it must also #define these macros in <stdint.h>; if it does
not provide a typedef, it must not #define the corresponding macro.

Or you could use (u)int_leastN_t or (u)int_fastN_t, which are required
to exist for N equals 8, 16, 32 and 64, regardless of which other types
exist.


A very informative reply, thanks!


Feb 28 '06 #4

P: n/a
rl*@hoekstra-uitgeverij.nl (Richard Bos) writes:
"copx" <in*****@invalid.com> wrote:
I wonder how portable the exact width types defined by stdint.h
are. I guess target platforms are not required to actually have all
those types, right?


Right. Except that if an implementation provides an (unsigned) integer
type of 8, 16, 32 or 64 bits, no matter what it is or how it is named,
it must also provide the corresponding (u)intN_t typedef in <stdint.h>.
If it does not otherwise provide a particular size integer, it needn't
define the typedef, and typedefs of any other size are completely
optional.


The {,u}int_{8,16,32,64}_t types are required only if the
implementation provides types of the specified sizes with no padding
bits (and for the signed types, with a two's complement
representation). If an implementation has a 32-bit signed integer
type with no padding bits, but its representation is one's-complement,
int32_t won't be defined (unless there's *also* a two's-complement
type).

The {,u}int_least{8,16,32,64}_t types and the
{,u}int_fast{8,16,32,64}_t type are required.

Types with sizes other than 8, 16, 32, and 64 are optional (and likely
to be rare).

--
Keith Thompson (The_Other_Keith) ks***@mib.org <http://www.ghoti.net/~kst>
San Diego Supercomputer Center <*> <http://users.sdsc.edu/~kst>
We must do something. This is something. Therefore, we must do this.
Feb 28 '06 #5

This discussion thread is closed

Replies have been disabled for this discussion.