wchar可以被提升为wint吗?
我发现glibc参考和C90修正案1之间存在矛盾 glibc参考文献中的引文说,wchar\u t可能会被提升为wint\t: 如果wchar\u t定义为char,则由于参数提升,类型wint\u t必须定义为int 但AMD1说: 目前,现有的实现可能有wchar\u t为int和wint\u t为int long,默认促销不会将int更改为long。 基本上,这是应该的 要在typedefs中输入和输入。因此,我们现在不会有wchar\u t 晋升为温特 有人知道哪一个是正确的吗 标准是否规定在以下两个程序中强制转换为unsigned int和to int是正确的?(我刚刚将wchar可以被提升为wint吗?,c,standards,wchar-t,widechar,c-standard-library,C,Standards,Wchar T,Widechar,C Standard Library,我发现glibc参考和C90修正案1之间存在矛盾 glibc参考文献中的引文说,wchar\u t可能会被提升为wint\t: 如果wchar\u t定义为char,则由于参数提升,类型wint\u t必须定义为int 但AMD1说: 目前,现有的实现可能有wchar\u t为int和wint\u t为int long,默认促销不会将int更改为long。 基本上,这是应该的 要在typedefs中输入和输入。因此,我们现在不会有wchar\u t 晋升为温特 有人知道哪一个是正确的吗 标准是否
wint
和wchar\u t
替换为它们在glibc中的实际含义)
(我刚刚将wint
和wchar\u t
替换为它们在glibc中的实际含义)
#包括
#包括
内部主(空)
{
setlocale(LC_CTYPE,“en_US.UTF-8”);
无符号整数;
wc=getwchar();
putwchar((int)wc);
}
--
#包括
#包括
#包括
内部主(空)
{
setlocale(LC_CTYPE,“en_US.UTF-8”);
int wc;
wc=L‘ÿ’;
if(iswlower((unsigned int)wc))返回0;
返回1;
}
第一个单词是“如果”,因此这只适用于这种情况。当然不一定是这样。@KamiKaze,但如果这些陈述至少在一个案例上有矛盾,这就是一个问题。注意我在过去几年里一直在给你打的东西。。。。N天,其中N令人沮丧地接近一周。我之前提供了标准的引用。我要去睡觉了;我现在不想找到x参考文献,但它们是对你最后M个问题(或者,至少是你最后M个问题,我觉得有义务向你解释世界的方式)的回答和/或评论(或者很可能两者都是)。你知道L'ÿ
的类型不一定是wchar\t
,但是对应于wchar\u t
的无符号类型。对于所有UTF-8语言环境,其值为255,类型为无符号。标准不要求在此强制转换。实现可能会警告您100%符合法律标准的代码,如果它愿意,这是一个单独的问题。无论如何,就标准而言,您对wint\t
和wchar\u t
的替换是无法解释的。如果您想谈论标准,请使用wint\u t
和wchar\u t
。
#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;
}