【发布时间】:2020-09-08 04:54:54
【问题描述】:
我是C新手,只是一个关于全局整数变量errno的问题,errno的类型是int,它的取值范围是1到124,因为这个值不能是负数,那么为什么它的类型是int 而不是unsigned int?
【问题讨论】:
-
谁说取值范围是1-106?
-
@secondimage C 标准只需要定义 3 个 errno 代码。实现添加自己的,因此没有设定范围。
-
这可能源于很久以前在准标准 C 中,除非另有说明,否则所有内容都默认为
int。由于这个原因,有许多类型为int的值。对于main(),你也可以问同样的问题,既然你不会向shell 返回负值,那为什么不是unsigned main()?可能是同样的原因。 -
ioplex.com/~miallen/errcmp.html - 不是每个人都使用相同的错误码
-
我认为原因很简单——无符号整数直到 1973 年才成为 C 语言的一部分,可能是在创建 errno 之后。 API 中还有其他一些地方事后看来应该是未签名的,但实际上并没有,其中一些地方已经被清理了多年。