### 4.2 Case Conversion

This section explains the library functions for performing conversions such as case mappings on characters. For example, `toupper` converts any character to upper case if possible. If the character can't be converted, `toupper` returns it unchanged.

These functions take one argument of type `int`, which is the character to convert, and return the converted character as an `int`. If the conversion is not applicable to the argument given, the argument is returned unchanged.

Compatibility Note: In pre-ISO C dialects, instead of returning the argument unchanged, these functions may fail when the argument is not suitable for the conversion. Thus for portability, you may need to write `islower(c) ? toupper(c) : c` rather than just `toupper(c)`.

These functions are declared in the header file `ctype.h`.

— Function: int tolower (int c)

> If c is an upper-case letter, `tolower` returns the corresponding lower-case letter. If c is not an upper-case letter, c is returned unchanged.

— Function: int toupper (int c)

> If c is a lower-case letter, `toupper` returns the corresponding upper-case letter. Otherwise c is returned unchanged.

— Function: int toascii (int c)

> This function converts c to a 7-bit `unsigned char` value that fits into the US/UK ASCII character set, by clearing the high-order bits. This function is a BSD extension and is also an SVID extension.

— Function: int _tolower (int c)

> This is identical to `tolower`, and is provided for compatibility with the SVID. See SVID.

— Function: int _toupper (int c)

> This is identical to `toupper`, and is provided for compatibility with the SVID.