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.