首页 > 解决方案 > 那时,C 中的 char 变量是否默认声明为无符号?

问题描述

这是来自 Kernighan 和 Ritchie 的“The C Programming Language”的代码片段。

#include <stdio.h>
/* copy input to output; 2nd version */
main()
{
   int c;
   while ((c = getchar()) != EOF) {
       putchar(c);
}

int c使用而不是的理由char c

...我们不能使用char因为除了任何可能的char之外c必须足够大以容纳EOF

我认为只有在用unsigned修改c时才使用int而不是char是合理的,因为有符号的char将无法保持EOF的值为-1,并且当我编写这个程序时被解释为,因此我没有问题。char csigned char c

char变量以前默认是无符号的如果是这样,那他们为什么要改变它?

标签: cchar

解决方案


我认为只有在用unsigned修改c时才使用int而不是char是合理的,因为有符号的char将无法保持 EOF的值为-1。

谁说EOF是-1?它被指定为负数,但不必为 -1。

无论如何,你错过了重点。尽管有符号,但getchar()需要返回一个可以表示比可以表示更多值的类型char,因为它需要以一种或另一种方式为每个char值提供,加上至少一个可与所有其他值区分开来的值,以用作EOF.

char 变量以前默认是无符号的吗?如果是这样,那他们为什么要改变它?

不,但是在 C89 和准标准 C 中,可以在没有首先声明的情况下调用函数,并且在这种情况下预期的返回类型是int. 这是许多标准库函数返回的原因之一int


推荐阅读