### 4.15 `toupper`, `toupper_l`—translate characters to uppercase ¶

Synopsis

    #include <ctype.h>
    int toupper(int c);
    int _toupper(int c);

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

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

`toupper_l` is like `toupper` 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 toupper`’ or ‘`#undef toupper_l`’.

`_toupper` performs the same conversion as `toupper`, but should only be used when c is known to be a lowercase character (`a`–`z`).

Returns
`toupper`, `toupper_l` return the uppercase equivalent of c when c is a lowercase character, and c otherwise.

`_toupper` returns the uppercase equivalent of c when it is a character between `a` and `z`. If c is not one of these characters, the behaviour of `_toupper` is undefined.

Portability
`toupper` is ANSI C. `_toupper` is not recommended for portable programs. `toupper_l` is POSIX-1.2008.

No supporting OS subroutines are required.