Может ли 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;
}

0 ответов

Другие вопросы по тегам