3

我看到 glibc 参考和 C90 修正案 1 的一个矛盾。

glibc reference 中的引用说 wchar_t 可能会提升为 wint_t:

如果 wchar_t 定义为 char 类型 wint_t 必须定义为 int 由于参数提升

但是 AMD1 是这样说的:

目前,现有实现可能将 wchar_t 设置为 int 并将 wint_t 设置为 long,并且默认促销不会将 int 更改为 long。基本上,这是由于 wchar_t 和 wint_t 是 typedef。因此,我们现在不会将 wchar_t 提升为 wint_t。

有人知道哪一个是正确的吗?

标准是否说在以下两个程序中强制转换为 unsigned int 和 int 是正确的?(我只是替换wint_twchar_t它们在 glibc 中的实际含义)(我只是替换wint_twchar_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;
}
4

0 回答 0