Может ли wchar_t быть повышен до wint_t?
Я вижу одно противоречие со ссылкой на glibc и поправкой 1 к C90.
Цитата из ссылки на glibc говорит, что wchar_t может быть повышен до wint_t:
если wchar_t определен как char, то тип wint_t должен быть определен как int из-за продвижения параметра
Но AMD1 говорит это:
В настоящее время существующая реализация может иметь wchar_t быть int, а wint_t - long, и продвижение по умолчанию не изменит int на long. В основном это происходит из-за того, что wchar_t и wint_t являются typedefs. Следовательно, теперь мы не будем повышать wchar_t до wint_t.
Кто-нибудь знает, какой из них правильный?
Стандарты говорят, что приведение к unsigned int и int в следующих двух программах гарантированно будет правильным? (Я только заменил wint_t
а также wchar_t
к их действительному значению в glibc)
(я только что заменил wint_t
а также wchar_t
к их действительному значению в glibc)
#include <locale.h>
#include <wchar.h>
int main(void)
{
setlocale(LC_CTYPE, "en_US.UTF-8");
unsigned int wc;
wc = getwchar();
putwchar((int) wc);
}
-
#include <locale.h>
#include <wchar.h>
#include <wctype.h>
int main(void)
{
setlocale(LC_CTYPE, "en_US.UTF-8");
int wc;
wc = L'ÿ';
if (iswlower((unsigned int) wc)) return 0;
return 1;
}