wchar_t is defined in wchar.h
Currently, if the developers want to use only wchar_t, they can not do
this without getting
Note that wint_t was introduced because wchar_t might be a type subject to 'default promotion' rules when passed to printf() et al. This matters, for example, when calling printf():
wchar_t wc = …;
printf("%lc", wc);
The value of wc might be converted to wint_t. If you're writing a function like printf() which needs to use the va_arg() macro from , then you should use the type wint_t to get the value.
The standard notes that wint_t might be the same type as wchar_t, but if wchar_t is a (16-bit) short (or unsigned short), wint_t might be (32-bit) int. To a first approximation, wint_t only matters when wchar_t is a 16-bit type. The full rules are, of course, more complex. For example, int could be a 16-bit type — but this is rarely a problem.
7.29 Extended multibyte and wide character utilities
7.29.1 Introduction
¶1 The header
defines four macros, and declares four data types, one tag, and many functions.326)2 The types declared are
wchar_tandsize_t(both described in 7.19);mbstate_twhich is a complete object type other than an array type that can hold the conversion state information necessary to convert between sequences of multibyte characters and wide characters;
wint_twhich is an integer type unchanged by default argument promotions that can hold any value corresponding to members of the extended character set, as well as at least one value that does not correspond to any member of the extended character set (see
WEOFbelow);327) …326) See ‘‘future library directions’’ (7.31.16).
327)wchar_tandwint_tcan be the same integer type.§7.19 Common definitions
¶2 … and
wchar_twhich is an integer type whose range of values can represent distinct codes for all members of the largest extended character set specified among the supported locales; the null character shall have the code value zero. Each member of the basic character set shall have a code value equal to its value when used as the lone character in an integer character constant if an implementation does not define
__STDC_MB_MIGHT_NEQ_WC__.
See Why the argument type of putchar(), fputc(), and putc() is not char for one place where the 'default promotion' rules from the C standard are quoted. There are probably other questions where the information is available too.