.\" Copyright (c) Bruno Haible <haible@clisp.cons.org>
.\"
.\" %%%LICENSE_START(GPLv2+_DOC_ONEPARA)
.\" This is free documentation; you can redistribute it and/or
.\" modify it under the terms of the GNU General Public License as
.\" published by the Free Software Foundation; either version 2 of
.\" the License, or (at your option) any later version.
.\" %%%LICENSE_END
.\"
.\" References consulted:
.\"   GNU glibc-2 source code and manual
.\"   Dinkumware C library reference http://www.dinkumware.com/
.\"   OpenGroup's Single UNIX specification http://www.UNIX-systems.org/online.html
.\"
.TH WCWIDTH 3  2019-03-06 "GNU" "Linux Programmer's Manual"
.SH NAME
wcwidth \- determine columns needed for a wide character
.SH SYNOPSIS
.nf
.BR "#define _XOPEN_SOURCE" "       /* See feature_test_macros(7) */"
.B #include <wchar.h>
.PP
.BI "int wcwidth(wchar_t " c );
.fi
.SH DESCRIPTION
The
.BR wcwidth ()
function returns the number of columns
needed to represent the wide character
.IR c .
If
.I c
is a printable wide character, the value
is at least 0.
If
.I c
is null wide character (L\(aq\e0\(aq), the value is 0.
Otherwise, \-1 is returned.
.SH RETURN VALUE
The
.BR wcwidth ()
function returns the number of
column positions for
.IR c .
.SH ATTRIBUTES
For an explanation of the terms used in this section, see
.BR attributes (7).
.TS
allbox;
lb lb lb
l l l.
Interface	Attribute	Value
T{
.BR wcwidth ()
T}	Thread safety	MT-Safe locale
.TE
.SH CONFORMING TO
POSIX.1-2001, POSIX.1-2008.
.PP
Note that glibc before 2.2.5 used the prototype
.PP
.nf
.BI "int wcwidth(wint_t " c );
.fi
.SH NOTES
The behavior of
.BR wcwidth ()
depends on the
.B LC_CTYPE
category of the
current locale.
.SH SEE ALSO
.BR iswprint (3),
.BR wcswidth (3)
