繁体   English   中英

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

[英]Why the type of “errno” in C is `int` rather than `unsigned int`?

我是新的C,只对全球整型变量问题errno ,类型errnoint其取值范围为1〜124,因为该值不能为负,那么为什么它的类型是int ,而不是unsigned int ?

很多用C事情是int传统的,而不是因为一些理由。 回到恐龙在地球上行走的时代,C 没有太多类型系统,而是将所有内容都视为int 随着语言的发展并最终标准化,类型系统变得不那么粗糙,但许多旧函数为其 API 保留了int类型。 (例如,还有另一个这样的旧int常量EOF ,这反过来又影响了许多函数的 API,如getcharctype.h函数。)

至于errno是在哪里定义的,得到的是什么类型,参见C17 7.5 (errno.h)

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM