stdint.h in C99 provides many options for integer sizes, types and ranges - so many I don't know what ones to choose!
I know how to use size_t
and ptrdiff_t
when appropriate, and I use fixed size types for storage and transmission. My question concerns values that will only be stored in memory of the host machine.
For example, a structure for an image might contain these members:
struct image {
integer width, height; /* pixel dimensions of the image */
integer bits_per_pixel;
...
};
If width
and height
will never exceed SHRT_MAX
, should a short
be used, or stick with int
? An image can't have negative width or height, so use an unsigned type? Perhaps (u)int_least16_t
is the correct choice? Something else?
If bits_per_pixel
will never exceed a value of 64 use char
, unsigned char
, uint8_t
, int
or something else?
What would you use in this example and why?
How does the CPU architecture the code will run on affect the choice? i.e. PPC or x86, 32 or 64bit.
How does the device the code will run on affect the choice? i.e. Desktop, phone, console.
How does the choice relate to performance and optimization?
My question in simple terms is: How do you choose which integer to use?