### 4.14 `tolower`, `tolower_l`—translate characters to lowercase ¶

Synopsis

    #include <ctype.h>
    int tolower(int c);
    int _tolower(int c);

    #include <ctype.h>
    int tolower_l(int c, locale_t locale);

Description
`tolower` is a macro which converts uppercase characters to lowercase, leaving all other characters unchanged. It is only defined when c is an integer in the range `EOF` to `255`.

`tolower_l` is like `tolower` but performs the function based on the locale specified by the locale object locale. If locale is LC_GLOBAL_LOCALE or not a valid locale object, the behaviour is undefined.

You can use a compiled subroutine instead of the macro definition by undefining this macro using ‘`#undef tolower`’ or ‘`#undef tolower_l`’.

`_tolower` performs the same conversion as `tolower`, but should only be used when c is known to be an uppercase character (`A`–`Z`).

Returns
`tolower`, `tolower_l` return the lowercase equivalent of c when c is an uppercase character, and c otherwise.

`_tolower` returns the lowercase equivalent of c when it is a character between `A` and `Z`. If c is not one of these characters, the behaviour of `_tolower` is undefined.

Portability
`tolower` is ANSI C. `_tolower` is not recommended for portable programs. `tolower_l` is POSIX-1.2008.

No supporting OS subroutines are required.