# toupper

## NAME



           toupper, tolower, toupper_l, tolower_l - convert uppercase or
           lowercase
    


## LIBRARY



           Standard C library (_libc_ , _-lc_)
    


## SYNOPSIS



           **#include <ctype.h>**
    
           **int toupper(int** _c_**);**
           **int tolower(int** _c_**);**
    
           **int toupper_l(int** _c_**, locale_t** _locale_**);**
           **int tolower_l(int** _c_**, locale_t** _locale_**);**
    
       Feature Test Macro Requirements for glibc (see
       feature_test_macros(7)):
    
           **toupper_l**(), **tolower_l**():
               Since glibc 2.10:
                   _XOPEN_SOURCE >= 700
               Before glibc 2.10:
                   _GNU_SOURCE
    


## DESCRIPTION



           These functions convert lowercase letters to uppercase, and vice
           versa.
    
           If _c_ is a lowercase letter, **toupper**() returns its uppercase
           equivalent, if an uppercase representation exists in the current
           locale.  Otherwise, it returns _c_.  The **toupper_l**() function
           performs the same task, but uses the locale referred to by the
           locale handle _locale_.
    
           If _c_ is an uppercase letter, **tolower**() returns its lowercase
           equivalent, if a lowercase representation exists in the current
           locale.  Otherwise, it returns _c_.  The **tolower_l**() function
           performs the same task, but uses the locale referred to by the
           locale handle _locale_.
    
           If _c_ is neither an _unsigned char_ value nor **EOF** , the behavior of
           these functions is undefined.
    
           The behavior of **toupper_l**() and **tolower_l**() is undefined if _locale_
           is the special locale object **LC_GLOBAL_LOCALE**(see duplocale(3))
           or is not a valid locale object handle.
    


## RETURN VALUE



           The value returned is that of the converted letter, or _c_ if the
           conversion was not possible.
    


## ATTRIBUTES



           For an explanation of the terms used in this section, see
           attributes(7).
           ┌──────────────────────────────────────┬───────────────┬─────────┐
           │ **Interface** │ **Attribute** │ **Value** │
           ├──────────────────────────────────────┼───────────────┼─────────┤
           │ **toupper**(), **tolower**(), **toupper_l**(),   │ Thread safety │ MT-Safe │
           │ **tolower_l**()                          │               │         │
           └──────────────────────────────────────┴───────────────┴─────────┘
    


## STANDARDS



           **toupper**()
           **tolower**()
                  C11, POSIX.1-2008.
    
           **toupper_l**()
           **tolower_l**()
                  POSIX.1-2008.
    


## NOTES



           The standards require that the argument _c_ for these functions is
           either **EOF** or a value that is representable in the type _unsigned_
           _char_.  If the argument _c_ is of type _char_ , it must be cast to
           _unsigned char_ , as in the following example:
    
               char c;
               ...
               res = toupper((unsigned char) c);
    
           This is necessary because _char_ may be the equivalent _signed char_ ,
           in which case a byte where the top bit is set would be sign
           extended when converting to _int_ , yielding a value that is outside
           the range of _unsigned char_.
    
           The details of what constitutes an uppercase or lowercase letter
           depend on the locale.  For example, the default **"C"** locale does
           not know about umlauts, so no conversion is done for them.
    
           In some non-English locales, there are lowercase letters with no
           corresponding uppercase equivalent; the German sharp s is one
           example.
    


* * *