为什么C中的“ errno”类型是“ int”而不是“ unsigned int”?

问题描述

我是C语言的新手,只是一个关于全局整数变量errno的问题,errno的类型为int,其值范围为1到124,因为该值可以不是负数,那为什么它的类型是int而不是unsigned int

解决方法

C中的许多事情int都是不合常规的,而不是出于某种原因。早在恐龙走过地球的时代,C并没有太多的类型系统,而是将所有内容都视为int。随着语言的发展并最终实现标准化,类型系统的使用不再那么粗糙,但是许多旧函数为其API保留了int类型。 (例如,还有一个这样的旧int常量EOF,这反过来又影响了诸如getcharctype.h函数之类的许多函数的API。)

关于errno的定义和类型,请参阅C17 7.5(errno.h)

errno
扩展为具有类型int和线程本地存储的可修改左值 持续时间

关于其价值的唯一保证是:

程序启动时,初始线程中errno的值为零/-/ 但绝不会通过任何库函数将其设置为零。可以通过库函数调用将errno的值设置为非零...

请注意,它表示为 nonzero ,而不是 positive 。有一些预定义的宏,例如EDOMEILSEQERANGE,可以保证它们为正数int,但是errno不仅限于这些价值观。如Linux等所示,该实现(编译器和系统)可能会定义更多值。您所说的范围1到124特定于Linux,但C语言中的任何内容都不能阻止其他实现使用不同的范围或负数。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...