#### A.5.2 Range of an Integer Type ¶

Suppose you need to store an integer value which can range from zero to one million. Which is the smallest type you can use? There is no general rule; it depends on the C compiler and target machine. You can use the ‘`MIN`’ and ‘`MAX`’ macros in `limits.h` to determine which type will work.

Each signed integer type has a pair of macros which give the smallest and largest values that it can hold. Each unsigned integer type has one such macro, for the maximum value; the minimum value is, of course, zero.

The values of these macros are all integer constant expressions. The ‘`MAX`’ and ‘`MIN`’ macros for `char` and `short int` types have values of type `int`. The ‘`MAX`’ and ‘`MIN`’ macros for the other types have values of the same type described by the macro—thus, `ULONG_MAX` has type `unsigned long int`.

`SCHAR_MIN` ¶

  This is the minimum value that can be represented by a `signed char`.

`SCHAR_MAX` ¶
`UCHAR_MAX` ¶

  These are the maximum values that can be represented by a `signed char` and `unsigned char`, respectively.

`CHAR_MIN` ¶

  This is the minimum value that can be represented by a `char`. It’s equal to `SCHAR_MIN` if `char` is signed, or zero otherwise.

`CHAR_MAX` ¶

  This is the maximum value that can be represented by a `char`. It’s equal to `SCHAR_MAX` if `char` is signed, or `UCHAR_MAX` otherwise.

`SHRT_MIN` ¶

  This is the minimum value that can be represented by a `signed short int`. On most machines that the GNU C Library runs on, `short` integers are 16-bit quantities.

`SHRT_MAX` ¶
`USHRT_MAX` ¶

  These are the maximum values that can be represented by a `signed short int` and `unsigned short int`, respectively.

`INT_MIN` ¶

  This is the minimum value that can be represented by a `signed int`. On most machines that the GNU C Library runs on, an `int` is a 32-bit quantity.

`INT_MAX` ¶
`UINT_MAX` ¶

  These are the maximum values that can be represented by, respectively, the type `signed int` and the type `unsigned int`.

`LONG_MIN` ¶

  This is the minimum value that can be represented by a `signed long int`. On most machines that the GNU C Library runs on, `long` integers are 32-bit quantities, the same size as `int`.

`LONG_MAX` ¶
`ULONG_MAX` ¶

  These are the maximum values that can be represented by a `signed long int` and `unsigned long int`, respectively.

`LLONG_MIN` ¶

  This is the minimum value that can be represented by a `signed long long int`. On most machines that the GNU C Library runs on, `long long` integers are 64-bit quantities.

`LLONG_MAX` ¶
`ULLONG_MAX` ¶

  These are the maximum values that can be represented by a `signed long long int` and `unsigned long long int`, respectively.

`LONG_LONG_MIN` ¶
`LONG_LONG_MAX` ¶
`ULONG_LONG_MAX` ¶

  These are obsolete names for `LLONG_MIN`, `LLONG_MAX`, and `ULLONG_MAX`. They are only available if `_GNU_SOURCE` is defined (see Feature Test Macros). In GCC versions prior to 3.0, these were the only names available.

`WCHAR_MAX` ¶

  This is the maximum value that can be represented by a `wchar_t`. See Introduction to Extended Characters.

The header file `limits.h` also defines some additional constants that parameterize various operating system and file system limits. These constants are described in System Configuration Parameters.