Tag: c standard library

该标准是否要求EOF为负数?

是否在标准中写明EOF必须是否定的? 相反, WEOF不需要是否定的。 为什么? wchar_t的情况不能与普通的char任何不同(除了从char到int自动升级扮演角色的情况),因为将wchar_t定义为char对于标准是完全正常的。 因此,必须适用类似的规则。 来自glibc引用的一些引用: 如果将wchar_t定义为char则由于参数提升,必须将类型wint_t定义为int 。 将wchar_t定义为char是合理的

为什么islower()和朋友需要处理EOF?

为什么islower()和朋友需要处理EOF ,而putchar()和朋友不需要? 为什么islower()将int作为unsigned char ,就像putchar() ? 这将是完全有道理的,因为我们必须首先检查EOF 。 另请参见为什么putchar() , fputc()和putc()的参数类型不是char ?

可以将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是typedef。 因此,我们现在不会将wchar_t提升为wint_t。 有人知道哪一个是正确的吗? 标准是否保证在以下两个程序中转换为unsigned int和int是正确的? (我只是将wint_t和wchar_t替换为它们在glibc中的实际含义)(我只是将wint_t和wchar_t替换为它们在glibc中的实际含义) #include #include int main(void) { setlocale(LC_CTYPE, “en_US.UTF-8”); unsigned int wc; wc = getwchar(); putwchar((int) wc); } – #include #include #include int main(void) { setlocale(LC_CTYPE, “en_US.UTF-8”); int wc; wc = L’ÿ’; if (iswlower((unsigned int) wc)) return 0; return 1; }

为什么没有“unsigned wchar_t”和“signed wchar_t”类型?

char的签名不是标准化的。 因此,有signed char和unsigned char类型。 因此,使用单个字符的函数必须使用可以包含signed char和unsigned char的参数类型(此类型被选为int ),因为如果参数类型为char ,我们将从编译器获取类型转换警告(如果在这样的代码中使用-Wconversion): char c = ‘ÿ’; if (islower((unsigned char) c)) … warning: conversion to ‘char’ from ‘unsigned char’ may change the sign of the result ( 这里我们考虑如果islower()的参数类型为char会发生什么 ) 而没有明确类型转换使其工作的事情是从char到int自动升级。 此外,引入了wchar_t的ISO C90标准没有说明wchar_t的表示。 来自glibc引用的一些引用: 将wchar_t定义为char是合理的 如果将wchar_t定义为char则由于参数提升,必须将类型wint_t定义为int 。 因此, wchar_t可以很好地定义为char ,这意味着必须应用类似于宽字符类型的规则,即,可能存在wchar_t为正的实现,并且可能存在wchar_t为负的实现。 unsigned wchar_t ,必须存在unsigned wchar_t和signed wchar_t类型(出于与unsigned char和signed char类型相同的原因)。 私有通信显示允许实现仅支持> = 0值的宽字符(与wchar_t的签名无关)。 […]

为什么`putchar()`,`fputc()`和`putc()`的参数类型不是`char`?

有谁知道为什么putchar() , fputc()和putc()参数类型不是char ,但putwchar() , fputwc()和putwc()参数类型是wchar_t ? 另见这个和这个 。

fgetpos / fsetpos和ftell / fseek有什么区别

使用函数fgetpos()和fsetpos()以及使用函数ftell()和fseek()来获取和设置文件中的位置有什么区别? fgetpos()和fsetpos()什么用? 为什么要使用它们而不是ftell()和fseek() ?

getch()和getchar()有什么区别?

getch和getchar函数之间的确切区别是什么?