The difference of int8_t, int_least8_t and int_fast8_t?

The difference is defined in the sections of the C99 standard that Carl Norum quoted. But it may be useful to have an example.

Suppose you have a C compiler for a 36-bit system, with char = 9 bits, short = 18 bits, int = 36 bits, and long = 72 bits. Then

  • int8_t does not exist, because there is no way to satisfy the constraint of having exactly 8 value bits with no padding.
  • int_least8_t is a typedef of char. NOT of short or int, because the standard requires the smallest type with at least 8 bits.
  • int_fast8_t can be anything. It’s likely to be a typedef of int if the “native” size is considered to be “fast”.

Leave a Comment