---
name: "towupper_l"
section: "3"
platform: "linux"
package: "man-pages"
version: "6.19-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux", "freebsd"]
url: "https://new.carta.tech/towupper"
---

# towupper\_l(3)

convert a wide character to uppercase

Part of [towupper(3)](/towupper/3.md).

## NAME

towupper, towupper\_l - convert a wide character to uppercase

## LIBRARY

Standard C library (*libc*, *-lc*)

## SYNOPSIS

```
#include <wctype.h>
```

**wint\_t towupper(wint\_t** *wc***);** **wint\_t towupper\_l(wint\_t** *wc***, locale\_t** *locale***);**

Feature Test Macro Requirements for glibc (see [**feature\_test\_macros**(7)](/feature_test_macros/7.md)):

**towupper\_l**():

```
    Since glibc 2.10:
        _XOPEN_SOURCE >= 700
    Before glibc 2.10:
        _GNU_SOURCE
```

## DESCRIPTION

The **towupper**() function is the wide-character equivalent of the [**toupper**(3)](/toupper/3.md) function. If *wc* is a lowercase wide character, and there exists an uppercase equivalent in the current locale, it returns the uppercase equivalent of *wc*. In all other cases, *wc* is returned unchanged.

The **towupper\_l**() function performs the same task, but performs the conversion based on the character type information in the locale specified by *locale*. The behavior of **towupper\_l**() is undefined if *locale* is the special locale object **LC\_GLOBAL\_LOCALE** (see [**duplocale**(3)](/duplocale/3.md)) or is not a valid locale object handle.

The argument *wc* must be representable as a *wchar\_t* and be a valid character in the locale or be the value **WEOF**.

## RETURN VALUE

If *wc* was convertible to uppercase, **towupper**() returns its uppercase equivalent; otherwise it returns *wc*.

## ATTRIBUTES

For an explanation of the terms used in this section, see [**attributes**(7)](/attributes/7.md).

| | | |
| --- | --- | --- |
| **Interface** | **Attribute** | **Value** |
| **towupper**() | Thread safety | MT-Safe locale |
| **towupper\_l**() | Thread safety | MT-Safe |

## STANDARDS

- **towupper**()

  C11, POSIX.1-2008 (XSI).

- **towupper\_l**()

  POSIX.1-2008.

## HISTORY

- **towupper**()

  C99, POSIX.1-2001 (XSI). Obsolete in POSIX.1-2008 (XSI).

- **towupper\_l**()

  POSIX.1-2008. glibc 2.3.

## NOTES

The behavior of these functions depends on the **LC\_CTYPE** category of the locale.

These functions are not very appropriate for dealing with Unicode characters, because Unicode knows about three cases: upper, lower, and title case.

## SEE ALSO

[**iswupper**(3)](/iswupper/3.md), [**towctrans**(3)](/towctrans/3.md), [**towlower**(3)](/towlower/3.md), [**locale**(7)](/locale/7.md)
