c - 那时,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 c
signed char c
char变量以前默认是无符号的吗?如果是这样,那他们为什么要改变它?
解决方案
我认为只有在用unsigned修改c时才使用int而不是char是合理的,因为有符号的char将无法保持 EOF的值为-1。
谁说EOF
是-1?它被指定为负数,但不必为 -1。
无论如何,你错过了重点。尽管有符号,但getchar()
需要返回一个可以表示比可以表示更多值的类型char
,因为它需要以一种或另一种方式为每个char
值提供,加上至少一个可与所有其他值区分开来的值,以用作EOF
.
char 变量以前默认是无符号的吗?如果是这样,那他们为什么要改变它?
不,但是在 C89 和准标准 C 中,可以在没有首先声明的情况下调用函数,并且在这种情况下预期的返回类型是int
. 这是许多标准库函数返回的原因之一int
。
推荐阅读
- azure-data-lake - 如何提取包含多个 CSV 数据集的 ZIP 文件
- composer-php - 无法识别自动加载文件中的类
- sql - 运行 Excel 宏时将数据类型 varchar 转换为日期时出错
- powershell - 为什么powershell不等到命令完成
- c# - ADO 是使用 C# 从 WebForms 与 SQL Server 通信的唯一方法吗?
- blazor - Blazor(服务器端)在同级组件之间进行通信
- kubernetes - 谷歌云kubernetes启动docker容器镜像,参数如--runtime=nvidia
- appium-ios - iOS 无法从一个选项卡切换到另一个选项卡
- excel - 如何在保留文件缩进的同时将excel文件保存为csv文件?
- node.js -