[英]Why the type of “errno” in C is `int` rather than `unsigned int`?
我是新的C,只对全球整型变量问题errno
,类型errno
是int
其取值范围为1〜124,因为该值不能为负,那么为什么它的类型是int
,而不是unsigned int
?
很多用C事情是int
传统的,而不是因为一些理由。 回到恐龙在地球上行走的时代,C 没有太多类型系统,而是将所有内容都视为int
。 随着语言的发展并最终标准化,类型系统变得不那么粗糙,但许多旧函数为其 API 保留了int
类型。 (例如,还有另一个这样的旧int
常量EOF
,这反过来又影响了许多函数的 API,如getchar
和ctype.h
函数。)
至于errno
是在哪里定义的,得到的是什么类型,参见C17 7.5 (errno.h)
errno
它扩展为具有类型int
和线程本地存储持续时间的可修改左值
关于其价值的唯一保证是:
程序启动时初始线程中
errno
的值为零 /--/ 但从未被任何库函数设置为零。 可以通过库函数调用将errno
的值设置为非零...
请注意,它表示非零,而不是正数。 有一些预定义的宏,如EDOM
、 EILSEQ
、 ERANGE
,它们保证为正int
,但errno
不仅限于这些值。 实现(编译器和系统)可以定义更多的值,如在 Linux 等中看到的。您所说的范围 1 到 124 特定于 Linux,但 C 中没有任何内容阻止其他实现使用不同的范围或负数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.